Pio*_*cki 4 powershell winrm windows-server-2012-r2
我尝试使用 powershell PSSession cmdlet,但我遇到了拒绝访问错误的问题。
我尝试做的是使用我运行命令的管理员帐户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)
Run Code Online (Sandbox Code Playgroud)
当我运行完全相同的命令时,我可以在另一台服务器上添加它,所有命令都成功了。
有任何想法吗?
PS 会话用于访问远程系统。为此,您必须进行一些配置:
1)确保 winrm 服务正在所有目标系统以及您的本地系统中运行。
2)您必须启用 PS Remoting。Enable-PSRemoting 将计算机配置为接收使用WS-Man发送的 PowerShell 远程命令。
所以,以管理员身份启动 Windows PowerShell
Enable-PSRemoting –Force
Run Code Online (Sandbox Code Playgroud)
3)您需要将远程计算机添加到 WinRM 中本地计算机的受信任主机列表中。为此,请键入:
winrm s winrm/config/client '@{TrustedHosts="RemoteComputer"}'
Run Code Online (Sandbox Code Playgroud)
4)检查配置使用:
winrm quickconfig
Run Code Online (Sandbox Code Playgroud)
完成后,您可以使用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
Run Code Online (Sandbox Code Playgroud)
既然您已经更新了问题:让我明智地告诉您:
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)
Run Code Online (Sandbox Code Playgroud)
希望对你有帮助。
最后有一个可能的答案,但一些背景知识可能会有所帮助,所以我从这个开始。
\n需要注意的是,我的回答仅与环回(localhost)会话有关。它不解决远程会话的问题。
环回会话非常有用,因为它们使具有管理员权限的用户能够调用本地主机上的用户命令或脚本。例如,在系统用户下运行的系统监控程序向登录用户发送一条 toast 消息。(是的,可能有更好的方法来做到这一点,但这不是这里讨论的内容)。
\n我遇到了完全相同的问题,其结果与 @Piotr\ 原始问题的更新部分中显示的结果完全相同。我在 Google 上广泛搜索了答案,但这没有产生有效的答案\xe2\x80\x94,尽管有些人报告了非常相似的问题。
\n眼镜
\n由于大多数使用 Powershell 远程处理的人似乎没有这个问题,这可能与我的机器的规格有关:
\nPS Env:\\> $PSVersionTable\n \nName Value\n---- -----\nPSVersion 5.1.17134.858\nPSEdition Desktop\nPSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}\nBuildVersion 10.0.17134.858\nCLRVersion 4.0.30319.42000\nWSManStackVersion 3.0\nPSRemotingProtocolVersion 2.3\nSerializationVersion 1.1.0.1\nRun Code Online (Sandbox Code Playgroud)\n这个EnableNetworkAccess选项对我有用,但我还不知道为什么。它已被确认适用于 PowerShell 命令New-PSSession和Invoke-Command,并且也可能适用于其他命令。
要配置 PowerShell 远程处理,需要执行一次\xe2\x80\x94 一次以下命令,但重复执行不会造成任何损害。它仅适用于私有(而非公共)网络。
\nPS Env:\\> Enable-PSRemoting -force\nRun Code Online (Sandbox Code Playgroud)\n以下示例不需要Trusted Hosts中的条目。
\nLAPTOP-XZ是计算机名==$env:COMPUTERNAME
.= 点别名localhost
Invoke-Command -ComputerName . -ScriptBlock { dir } -EnableNetworkAccess\n \nNew-PSSession -EnableNetworkAccess\nNew-PSSession localhost -EnableNetworkAccess\nNew-PSSession 127.0.0.1 -EnableNetworkAccess\nNew-PSSession LAPTOP-XZ -EnableNetworkAccess\nRun Code Online (Sandbox Code Playgroud)\n计算机的 IPv4 地址(192.168.1.103在我的例子中)仅在包含在Trusted Hosts中时才有效。EnableNetworkAccess在这种情况下不需要该选项。
PS Env:\\> Set-Item WSMan:\\localhost\\Client\\TrustedHosts -Value "192.168.1.103"\n \nNew-PSSession 192.168.1.103 \nRun Code Online (Sandbox Code Playgroud)\n请注意,在受信任的主机localhost中包含及其其他别名在上面的示例中不起作用(需要)。-EnableNetworkAccess
| 归档时间: |
|
| 查看次数: |
35715 次 |
| 最近记录: |