创建虚拟机后,我想在远程机器上安装 anydesk。问题是使用远程 powershell 命令,我无法安装它并获得拒绝访问错误。
Invoke-Command -ComputerName $RemoteMachine -Credential $Cred `
-ScriptBlock {
\\10.1.1.3\share\apps\TOOLS\AnyDesk.exe --install C:\ --start-with-win
}
说:
Access is denied
+ CategoryInfo : OperationStopped: (:) [], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException
+ PSComputerName : 10.1.1.40
另外,我尝试使用Start-Process
以下-Verb
选项
Invoke-Command -ComputerName $RemoteMachine -Credential $Cred
-ScriptBlock {
Start-Process -FilePath "\\10.1.1.3\share\apps\TOOLS\AnyDesk.exe" -ArgumentList "--install C:\ --start-with-win" -Verb RunAs
}
但是,我得到同样的错误:
Access is denied
+ CategoryInfo : NotSpecified: (:) [Start-Process], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.St
artProcessCommand
+ PSComputerName : 10.1.1.40
有什么办法可以解决吗?
更新:
在下面的完整代码中,我可以将用户和密码传递给远程机器,并dir
在访问\\10.1.1.3
. 我还必须强调共享文件夹是公开的。如果我手动登录到我的远程机器(10.1.1.40),我可以在\\10.1.1.3\share\apps\Tools
没有任何密码的情况下打开。
$RemoteMachine = "10.1.1.40"
Set-Item WSMan:\localhost\Client\TrustedHosts -Value $RemoteMachine
$Username = 'user'
$Password = ' '
$pass = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass
Invoke-Command -ComputerName $RemoteMachine -Credential $Cred -ScriptBlock {
& {
dir
Start-Process -FilePath "\\10.1.1.3\share\apps\TOOLS\AnyDesk.exe" -ArgumentList "--install C:\ --start-with-win" -Verb RunAs
} }
输出是
PS C:\Windows\system32> C:\Users\user\Desktop\anydesk.ps1
Directory: C:\Users\user\Documents
Mode LastWriteTime Length Name PSComputerName
---- ------------- ------ ---- --------------
d----- 1/7/2021 12:48 AM PowerShell 10.1.1.40
d----- 1/7/2021 12:48 AM WindowsPowerShell 10.1.1.40
Access is denied
+ CategoryInfo : NotSpecified: (:) [Start-Process], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.St
artProcessCommand
+ PSComputerName : 10.1.1.40
正如另一个关于双跳是问题的答案中所指定的那样,您确实需要根据其中一种方法配置委派和信任,以使其按照您在此处尝试的方式工作。
问题是远程机器正在尝试从 UNC 路径执行可执行文件,并且使用的凭据遇到了双跳问题,并且没有配置为委派等。
您可以通过首先将文件从 UNC 路径复制到远程计算机的本地文件系统来解决此问题,这样当从那里调用它时,安装将继续进行。
我使用显式凭据编写了几个 PowerShell 脚本变体,不需要配置任何委派或信任来获取可执行文件以在远程计算机上执行。这将允许它按照解决方案继续安装过程。
解决方法 PowerShell(变体 1)
注意: 此变体假定您正在执行 PowerShell 的帐户已经可以访问
C$
. 或您要将可执行文件复制到的远程计算机上的任何其他共享文件夹,并且凭据是用于执行和安装该文件的权限仅限远程机器。解决方法 PowerShell(变体 2)
注意: 此变体假定您使用的凭据既用于访问
C$
. 或您要将可执行文件复制到的远程计算机上的任何其他共享文件夹,也用于在远程计算机上执行和安装该文件的权限。支持资源
我怀疑问题是远程会话没有存储您的密码,并且无法
\\10.1.1.3
匿名连接到服务器(SMB 服务器始终需要身份验证,与 NFS 不同)。您需要配置 Invoke-Command 以将您的凭据(密码、Kerberos 票证)“委托”到远程服务器。本文有几种方法——尽管它主要讨论嵌套调用命令,但一切仍然适用于 SMB 文件共享访问。