我在w2008R2下执行PS脚本。例如
Alter_all.ps1
如果我制作它的标准副本以保持原始完整的下一个副本,例如
Alter_all - Copy.ps1
如果我尝试执行新编辑的脚本Alter_all - Copy.ps1,它会运行以前脚本中的内容,无论如何。为了解决这个问题,我发现我需要将脚本重命名为没有空格,然后脚本才能使用新值
EG
Alter_all-Copy.ps1
似乎Powershell以某种方式检查脚本的名称,但是在空的空间名称停止,认为您正在执行之前执行的相同脚本?这背后的原因是什么?
Arnaud Claudel's helpful answer向您展示如何从PowerShell控制台窗口或脚本调用其路径中包含嵌入空格的脚本。
在稍后的注释中,您声明您没有从命令行调用脚本,而是尝试通过双击文件资源管理器来运行它:
*.ps1
文件不会运行它们 - 而是打开它们进行编辑。因此,您需要通过编辑注册表来修复自定义配置:
注意:
HKEY_LOCAL_MACHINE
替换为下面的HKEY_CURRENT_USER
,如注释中所述。-NoExit
用于调用powershell.exe
,这意味着在脚本退出后窗口保持打开状态。
通过编辑下面的代码可以轻松调整这些行为。%1
是如何包含在\"...\"
中的,以确保具有嵌入空格的偶数路径作为单个参数传递给powershell.exe
的-File
参数。# Create temp. file for registry definitions.
$tmpFile = [IO.Path]::GetTempFileName()
# Change this to 'HKEY_LOCAL_MACHINE' to override
# the machine-level configuration - REQUIRES RUNNING AS ADMIN.
$rootKey = 'HKEY_CURRENT_USER'
# Create the registry definitions...
@"
Windows Registry Editor Version 5.00
[$rootKey\Software\Classes\Microsoft.PowerShellScript.1\shell\Open\command]
@="$($PSHOME -replace '\\', '\\')\\powershell.exe -NoExit -File \"%1\" %*"
"@ > $tmpFile
# ... and import them.
reg.exe import $tmpFile
# Clean up.
Remove-Item -LiteralPath $tmpFile
这是因为- Copy.ps1
作为参数传递。
尝试使用以下语法执行新脚本:
& 'Alter_all - Copy.ps1'