我可以右键单击DEC16.bat文件,它将运行。我在脚本中包含它以从闪存驱动器运行时遇到问题。 PowerShell脚本基本上将一堆安装文件复制到客户端的计算机上。
Windows PowerShell
Copyright (C) 2013 Microsoft Corporation. All rights reserved.
PS H:\> $script = "\\xxxhsfmsl03\adap\Database\Install\AugKA\DEC16.bat"
PS H:\>
PS H:\> Start-Process powershell -Credential “xxx\xxxvis_desktop” -ArgumentList '-noprofile -command &{Start-Process $script -verb runas}'
Start-Process : This command cannot be run due to the error: The directory name is invalid.
At line:1 char:1
+ Start-Process powershell -Credential “xxx\xxxvis_desktop” -ArgumentList '-noprof ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Start-Process], InvalidOperationException
+ FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand
PS H:\> $script
\\xxxhsfmsl03\adap\Database\Install\AugKA\DEC16.bat
PS H:\>
(我已插入“xxx”以保护无辜者)
答案 0 :(得分:0)
尝试以下方法:
Start-Process powershell `
-WorkingDirectory (Split-Path $script) `
-Credential xxx\xxxvis_desktop `
-ArgumentList '-noprofile', '-command', "
& { start-process powershell -ArgumentList '-File', '$script' -Verb RunAs }
"
您的主要问题很可能是目标用户 - xxx\xxxvis_desktop
- 在调用时缺少访问恰好是当前目录的权限< /强>
-WorkingDirectory (Split-Path $script)
设置工作目录。到了.dir。目标脚本所在的位置。您的第二个问题 - 正如Matt对问题的评论中指出的那样 - 是您传递给Start-Process
的命令字符串是括在'...'
(单引号)中,导致嵌入的$script
变量引用不被展开(插值)。
使用"..."
( double 引号)修复了该问题; 请注意,要传递给{{1}的命令行可执行文件被拆分为通过powershell
传递的单个参数 - (文字,单引号)选项,后跟(插值,双引号)命令字符串,这是更好的方法传递参数,因为它更健壮。
注意,命令字符串中的-ArgumentList
引用如何包含在 embedded $string
中,以确保在调用的'...'
实例时解析命令字符串时,powershell
的值被识别为单个参数(尽管这对于手头的值$string
来说不是必需的)。
\\xxxhsfmsl03\adap\Database\Install\AugKA\DEC16.bat
的值有可能嵌入了$script
个实例,则必须使用以下内容(将'
个实例加倍来转义它们):'
最后一个问题是您无法直接在脚本上使用$($script -replace "'", "''")
- 就像在外部通话中一样,您需要调用Start-Process
并将其传递给脚本文件名作为参数。
附加说明:
命令字符串中powershell
调用周围的& { ... }
包装器不是必需的。
通常情况下,您可以使用{em>单 start-process
来调用Start-Process
来提升-Verb RunAs
的运行速度,但不幸的是,{{1} }}和$script
无法合并,因此意味着:
否则,系统会提示您输入凭据,但您无法在该对话框中预填充用户名。
-Verb RunAs