我使用以下代码调用脚本超时:
function getHDriveSize($usersHomeDirectory) {
$timeOutSeconds = 600
$code = {
& powershell.exe $args[0] -Path $args[1]
}
$job = Start-Job -ScriptBlock $code -ArgumentList $script:getHDriveSizePath, $usersHomeDirectory
if (Wait-Job $job -Timeout $timeOutSeconds) {
Receive-Job $job
} else {
'Timed Out'
}
}
但是当$script:getHDriveSizePath
中有空格时,我收到以下错误:
The term 'H:\FolderNameBeforeSpace' is not recognized as the name of a cmdlet,...
我尝试使用"'$($args[0])'"
(在单引号之前使用转义字符)而不是$args[0]
,但后来我收到此错误:
Unexpected token '-Path' in expression or statement.
如果$script:getHDriveSizePath
不包含空格,则脚本可以正常工作。
答案 0 :(得分:0)
假设$script:getHDriveSizePath
拥有PS1脚本的路径,您应该更改
& powershell.exe $args[0] -Path $args[1]
到
& powershell.exe -File $args[0] -Path $args[1]
如果您未指定-File
参数,PowerShell将假定$args[0]
是PowerShell命令。或者,您可以这样做:
& powershell.exe "& '$($args[0])'" -Path $args[1]
这与此处讨论的问题相同:How to run a PowerShell script?。 HTH。