gpt4 book ai didi

powershell - 远程 session 上的Invoke-Command返回本地值

转载 作者:行者123 更新时间:2023-12-02 23:18:56 26 4
gpt4 key购买 nike



与PSSession一起运行时,Invoke-Command脚本块是否应该始终在远程计算机上运行?

语境

我针对服务器列表运行了以下Powershell:

Clear-Host
$cred = get-credential 'myDomain\myUsername'
$psSessions = New-PSSession -ComputerName @(1..10 | %{'myServer{0:00}' -f $_}) -Credential $cred
Invoke-Command -Session $psSessions -ScriptBlock {
Get-Item -Path 'HKLM:\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters'
} | Sort-Object PSComputerName
# $psSessions | Remove-PSSession

这返回:
    Hive: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos


Name Property PSComputerName
---- -------- --------------
Parameters MaxPacketSize : 1 myServer01
MaxTokenSize : 65535
Parameters MaxPacketSize : 1 myServer02
MaxTokenSize : 65535
Parameters MaxPacketSize : 1 myServer03
MaxTokenSize : 65535
Parameters MaxPacketSize : 1 myServer04
MaxTokenSize : 65535
Parameters MaxPacketSize : 1 myServer05
MaxTokenSize : 65535
Parameters MaxPacketSize : 1 myServer06
MaxTokenSize : 65535
Parameters MaxPacketSize : 1 myServer07
MaxTokenSize : 65535
Parameters MaxPacketSize : 1 myServer08
MaxTokenSize : 65535
Parameters MaxPacketSize : 1 myServer09
MaxTokenSize : 65535
Parameters MaxPacketSize : 1 myServer10
MaxTokenSize : 65535

一切看起来不错;我只希望我不会看到这些值/在设置这些服务器上的值以确保没有覆盖任何内容之前,我已经将其作为一种快速检查来运行。

我快速浏览了使用regedit的其中一台服务器;并发现 MaxTokenSizeMaxPacketSize不存在。

然后,我修改了命令以使用 Get-ItemProperty而不是 Get-Item:
Invoke-Command -Session $psSessions -ScriptBlock {
Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters' -Name 'MaxTokenSize'
} | Sort-Object PSComputerName

这次我有10个错误:
Property MaxTokenSize does not exist at path HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters.
+ CategoryInfo : InvalidArgument: (MaxTokenSize:String) [Get-ItemProperty], PSArgumentException
+ FullyQualifiedErrorId : System.Management.Automation.PSArgumentException,Microsoft.PowerShell.Commands.GetItemPropertyCommand
+ PSComputerName : myServer01
# ... (and the same for the other 9 servers, with only PSComputerName changing)

关于返回值的来源……它们来自我的本地计算机。修改本地注册表项并重新运行原始命令,将所有“服务器”显示为新值。

我猜这是一个错误;但是因为到目前为止我还没有玩过 PSSession,所以我想在这里检查一下,以防我对这些命令的理解/使用有问题,或者在使用 PSSession时是否存在需要注意的问题。

最佳答案

用管道将其传输到fl *或ft *,以便它不使用格式文件显示注册表项。格式文件在本地运行get-itemproperty以尝试显示属性。

在$ PSHOME \ Registry.format.ps1xml的底部,键入Microsoft.Win32.RegistryKey:

<ScriptBlock>
$result = (Get-ItemProperty -LiteralPath $_.PSPath |
Select * -Exclude PSPath,PSParentPath,PSChildName,PSDrive,PsProvider |
Format-List | Out-String | Sort).Trim()
$result = $result.Substring(0, [Math]::Min($result.Length, 5000) )
if($result.Length -eq 5000) { $result += "..." }
$result
</ScriptBlock>

关于powershell - 远程 session 上的Invoke-Command返回本地值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57400948/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com