我尝试使用powershell PSSession cmdlet,但我正在努力解决Access Denied Error。
我尝试使用管理员帐户运行命令New-PSSession
(或Enter-PSSession
),但遗憾的是我收到了拒绝访问错误。
我正确地遵循所有说明,因为在另一台服务器上我可以毫无困难地运行这些命令。
此外,我想告知test-wsman
回复我的回复。我使用内置管理员帐户并已检查Set-PSSessionConfiguration -Name Microsoft.PowerShell -ShowSecurityDescriptorUI
所有的特权似乎都没问题。我没有更多的想法,寻求帮助。
更新
我发现了一个有趣的行为:
让我们假设:
我使用以下命令:
new-pssession // access denied
new-pssession localhost // access denied
new-pssession 127.0.0.1 // access denied
new-pssession 22.222.222.222 // Session created ! It's working !
new-pssession 22.222.222.222 -Credential Get-Credential // access denied (using the same administrator credentials which I'm using for RDP)
我可以在其他服务器上添加它,当我运行完全相同的命令时,所有命令都成功。
任何想法?
答案 0 :(得分:3)
最后可能对此有一个答案,但是一些背景知识可能会有所帮助,所以我从此开始。
请务必注意,我的回答仅与 loopback (localhost
)会话有关。它没有解决远程会话的问题。
回送会话非常有用,因为它们使具有管理员权限的用户可以调用本地主机上的用户命令或脚本。这方面的一个示例是从在系统用户下运行的系统监视程序向登录用户的敬酒消息。 (是的,也许有更好的方法可以做到这一点,但这不是这里讨论的内容。)
我遇到了完全相同的问题,结果与@Piotr原始问题的更新部分中显示的结果完全相同。我在Google上广泛搜索了答案,但这没有找到有效的答案-即使有少数人报告的问题非常相似。
规格
大多数使用Powershell远程处理的人似乎都没有这个问题,这可能与我的计算机的规格有关:
PS Env:\> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.17134.858
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.17134.858
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
EnableNetworkAccess
选项对我有用,但是我不知道为什么。 已确认可用于PowerShell命令New-PSSession
和Invoke-Command
,并且也可用于其他命令。
要配置PowerShell远程处理,一次需要以下命令-尽管它 如果重复,不会损害任何东西。它只能在私人(而非公共)网络上工作。
PS Env:\> Enable-PSRemoting -force
以下示例不需要在受信任主机中输入任何内容。
LAPTOP-XZ
是计算机名== $env:COMPUTERNAME
.
= localhost
的点别名
Invoke-Command -ComputerName . -ScriptBlock { dir } -EnableNetworkAccess
New-PSSession -EnableNetworkAccess
New-PSSession localhost -EnableNetworkAccess
New-PSSession 127.0.0.1 -EnableNetworkAccess
New-PSSession LAPTOP-XZ -EnableNetworkAccess
计算机的IPv4地址(在我的情况下为192.168.1.103
)仅在受信任的主机中包含时才有效。在这种情况下,不需要EnableNetworkAccess
选项。
PS Env:\> Set-Item WSMan:\localhost\Client\TrustedHosts -Value "192.168.1.103"
New-PSSession 192.168.1.103
请注意,在上面的示例中,在受信任的主机中包含localhost
及其其他别名无效(需要-EnableNetworkAccess
)。
答案 1 :(得分:1)
PS会话用于访问远程系统。为此你必须做一些配置:
1)确保winrm服务在所有目标系统以及本地系统中运行。
2)您必须启用PS Remoting。 Enable-PSRemoting将计算机配置为接收使用 WS-Man 发送的PowerShell远程命令。
因此,以管理员身份启动Windows PowerShell
Enable-PSRemoting –Force
3)您需要将远程计算机添加到WinRM中本地计算机的可信主机列表中。为此,请键入:
winrm s winrm/config/client '@{TrustedHosts="RemoteComputer"}'
4)使用以下方法检查配置:
winrm quickconfig
完成后,您可以使用 New-Pssession 命令创建与目标系统的交互式会话。
否则,您可以使用 Invoke-Command 执行一些远程操作,如下所示:
我在评论部分提到过它必须如何工作。 示例:
$username = "Username"
$password = "Password"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr
# will list all the processess in the remote system
# if you are the entireprise admin or the domain admin then you do not have to pass the credentials. It will take the windows authentication by default.
Invoke-Command -ComputerName RemoteServer -ScriptBlock {Get-Process } -Credential $cred
既然你已经更新了这个问题:让我明白一点:
127.0.0.1 和 localhost - 两者都指向本地系统。表示您必须将它们添加到本地系统的可信主机列表中。 不建议将PSSession用于本地系统,因为您可以直接在PS控制台中运行所有ps cmdlet。
22.222.222.222 - 工作原因您已将其添加到可信主机列表中,并且默认使用Windows身份验证
22.222.222.222 -Credential Get-Credential ----因为格式有点不对而无法正常工作。使用方式如下:
New-PSSession -ComputerName 22.222.222.222 -Credential (Get-Credential)
希望它对你有所帮助。
答案 2 :(得分:1)
我遇到了这个确切的问题,发现我传入的用户名必须是FQDN。即username@domain.com,而不仅仅是用户名。一旦我更新到它起作用。
答案 3 :(得分:0)
试试这个: https://www.powershellgallery.com/packages/Invoke-PSSession
它调用会话,然后使用您提供的凭据注册PSSessionConfiguration。基本上为DoubleHop提供凭证