我有一个文件夹,里面有 4 个 PowerShell 文件,每个文件都有自己的 4 个可执行文件要调用。我试图让 1 个 PowerShell 文件将 runonce 键的第二个脚本写入注册表,然后向下传播。到目前为止,我已经成功完成了一个脚本和一个可执行文件,还剩下 3 个要完成。我确实编写了一个 runonce 键,其中有一个变量 $cwd,即 $PSScriptRoot,但它不会填充键中的路径。它显示为:
这是运行一次的注册表项的样子。
"powershell.exe -noexit "$cwd\main2.ps1" -ArgumentList "-path $cwd""
我希望注册表项看起来像这样:
"powershell.exe -noexit "C:\Test\test\main2.ps1" -ArgumentList "-path C:\Test\test""
关于如何将路径从我的第一个 powershell 脚本中的变量传递到脚本中,有什么想法吗?
我尝试了一下,但只运行了一个脚本和 exe,另外我能够将下一个项写入注册表,但它不会运行下一个脚本。
更好的版本:
"powershell.exe -noexit -File `"C:\Test\test\main2.ps1 -path C:\Test\test`""
PowerShell 脚本
这是main0,我有main,main1,main2。
$homepath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce"
If(-NOT(Test-Path $homepath)){
New-Item $homepath -Force | Out-Null
}
$cwd = $PSScriptRoot
Set-ItemProperty $homepath (New-Guid) '
C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -noexit "$cwd\\main.ps1" -ArgumentList "-path $cwd""
'
$name = (Get-ChildItem $cwd\*.exe | where {$_.Name -like "*exename*"}).FullName
start $name
您的主要问题是您错误地使用了逐字的单引号字符串(
'...'
):如果您希望扩展(插入)其中嵌入的变量引用,则需要使用可扩展(插入)的双引号字符串(
"..."
) 。$cwd
"
在 里面嵌入字符"..."
,您必须将它们转义为`"
,如下所示,或者""
。PowerShell CLI 没有参数;而是在传递给 的脚本文件参数 ( )
-ArgumentList
之后直接指定传递参数。*.ps1
-File
所以:
在脚本上下文中,使用可扩展字符串的here-string
"
变体,在这种情况下嵌入的字符不需要转义: