尝试使用运行方式管理员使用PowerShell运行.bat文件时出错
我可以右键单击DEC16.bat文件,它将运行。我无法将其包含在从闪存驱动器运行的脚本中。 PowerShell脚本实质上是将一堆安装文件复制到客户端计算机上尝试使用运行方式管理员使用PowerShell运行.bat文件时出错,powershell,batch-file,Powershell,Batch File,我可以右键单击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:\> P
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”以保护无辜)尝试以下方法:
Start-Process powershell `
-WorkingDirectory (Split-Path $script) `
-Credential xxx\xxxvis_desktop `
-ArgumentList '-noprofile', '-command', "
& { start-process powershell -ArgumentList '-File', '$script' -Verb RunAs }
"
- 您的主要问题很可能是目标用户--
--在调用时没有访问当前目录的权限xxx\xxxvis\u desktop
- 将工作目录显式设置为允许目标用户访问的目录应该可以解决该问题-
设置工作目录。给局长。目标脚本所在的位置-工作目录(拆分路径$script)
- 将工作目录显式设置为允许目标用户访问的目录应该可以解决该问题-
- 您的第二个问题—正如在对问题的评论中所指出的—是传递给
启动进程
的命令字符串被括在
(单引号)中,导致嵌入的“…”
变量引用未展开(内插)$script
- 使用
(双引号)修复了该问题但是,请注意,要传递给“…”
可执行文件的命令行被拆分为通过powershell
-the(literal,single-quoted)选项传递的单个参数,然后是(interpolated,double-quoted)命令字符串,这是传递参数的首选方式,因为它更健壮-ArgumentList
- 请注意,命令字符串中的
引用如何包含在嵌入式$string
中,以确保调用的'…'
实例解析命令字符串时,powershell
的值被识别为单个参数(虽然这对于手头的值不是必需的,$string
)\\xxxhsfmsl03\adap\Database\Install\AugKA\DEC16.bat
- 如果
的值可能嵌入了$script
实例,则必须使用以下实例(将'
实例加倍以转义它们):'
$($script-replace“,”)
- 如果
- 使用
- 最后一个问题是,您不能直接在脚本上使用
——就像在外部调用中一样,您需要调用启动进程
,并将脚本文件名作为参数传递给它powershell
补充说明:
- 在命令字符串中围绕
调用的启动进程
包装器应该是不必要的&{…}
- 通常,您可以使用带有
的单个-Verb RunAs
启动进程调用来提升
的运行,但不幸的是,$script
和-Verb RunAs
不能组合,这意味着:-Credential
- 如果当前用户是一个管理帐户,则提升的会话将始终以该用户的身份运行-您只会得到一个确认提升的是/否提示
- 否则,将提示输入凭据,但您不能在该对话框中预先填充用户名
Start进程-动词RunAs powershell-ArgumentList'-noprofile','-File',$script
Start-Process powershell `
-WorkingDirectory (Split-Path $script) `
-Credential xxx\xxxvis_desktop `
-ArgumentList '-noprofile', '-command', "
& { start-process powershell -ArgumentList '-File', '$script' -Verb RunAs }
"
- 您的主要问题很可能是目标用户--
--在调用时没有访问当前目录的权限xxx\xxxvis\u desktop
- 将工作目录显式设置为允许目标用户访问的目录应该可以解决该问题-
将工作目录设置为目标脚本所在的目录-工作目录(拆分路径$script)
- 将工作目录显式设置为允许目标用户访问的目录应该可以解决该问题-
- 您的第二个问题—正如在对问题的评论中所指出的—是传递给
启动进程
的命令字符串被括在
(单引号)中,导致嵌入的“…”
变量引用未展开(内插)$script
- 使用
(双引号)修复了该问题;但是,请注意,要传递到“…”
可执行文件的命令行被拆分为通过powershell
-传递的单个参数(文本,单引号)选项,然后是(插值,双引号)命令字符串,这是传递参数的首选方式,因为它更健壮-ArgumentList
- 请注意,命令字符串中的
引用如何包含在嵌入式$string
中,以确保调用的'…'
实例解析命令字符串时,powershell
的值被识别为单个参数(虽然这对于手头的值不是必需的,$string
)\\xxxhsfmsl03\adap\Database\Install\AugKA\DEC16.bat
- 如果
的值可能嵌入了$script
实例,则必须使用以下实例(将'
实例加倍以转义它们):'
$($script-replace“,”)
- 如果
- 使用
- 最后一个问题是,您不能直接在脚本上使用
——就像在外部调用中一样,您需要调用启动进程
,并将脚本文件名作为参数传递给它powershell
补充说明:
- 在命令字符串中围绕
调用的启动进程
包装器应该是不必要的&{…}
- 通常,您可以使用带有
的单个-动词RunAs
调用来提升启动进程
的运行,但不幸的是$script