我今天很难让这个简单的(?)功能正常工作。
我有一个 PowerShell 脚本,它从基于 txt 的文件中读取计算机名称。通过以下单行从 PowerShell 会话运行时,它可以正常工作:
./"Server Health Check.ps1" -List One-off.txt
如您所见,它的文件名很长,因此用引号括起来。
但是,我正在构建一个带有单选框的 PowerShell GUI 表单,该表单将传递用于调用脚本的文本文件的选择。诀窍是,脚本需要使用备用管理员帐户运行,我不清楚如何使其工作。
对于另一个我没有使用的脚本,我知道我可以使用以下内容,它使用旧的 DOS“runas”,但是,它不适用于 -list 函数。
invoke-command -scriptblock {runas.exe /user:domain\$Env:Username"admin" "powershell.exe -file \"\\Server\c$\LONG FOLDER\Server Health Check.PS1""}
那么,简而言之,如何使用从命令行读取参数(-List)的备用凭据启动脚本?我也很想保留我的目录结构,其中包括带空格的文件夹。该脚本的标题是:“服务器健康检查.ps1”
我尝试的最后一件事是以下
$ScriptPath = "C:\SCRIPTS FOLDER\Server Health Check.ps1"
$ArgList = "-List C:\SCRIPTS FOLDER\One-off.txt"
Invoke-Command -filepath $ScriptPath -Credential DragonBallDomain\$Env:UserName"Admin" -ArgumentList $ArgList
结果是以下消息:
Invoke-Command : Parameter set cannot be resolved using the specified named parameters.
我几乎可以肯定这可以通过调用命令或启动过程来实现,这只是获取正确格式的问题吗?我可能在使用 start-process 或 invoke-command 的试验中遗漏了 / 或 ' 或 "" 。
任何帮助表示赞赏!
4月30日更新:
我已经尝试了更多来完成这项工作,我已经接近了,但仍然不完全在那里。
$LongScriptPath = resolve-path Script.ps1
$LongFolderPath = \\UNC\PATH TO FOLDER\WITH LONG NAME\
start-process -filepath powershell.exe -argumentlist " -file``"$($FilePath.path)`"" -cred DOMAIN\USERID -WorkingDirectory "$LongFolderPath"
添加 -credential 会导致错误,指出 -file 参数无效。我确信有办法做到这一点。