gpt4 book ai didi

powershell - 如何将 InputObject 上的 NoteProperties 访问到远程处理 session

转载 作者:行者123 更新时间:2023-12-04 17:54:56 25 4
gpt4 key购买 nike

我无法访问 PSObject s 定义了 NoteProperties,通过 Invoke-Command 传递到远程 session .我为此目的构建对象的原因是我需要访问远程 session 中的两个独立信息,但 PowerShell 仅提供单个 InputObject .

我的代码看起来像这样:

$sessionInput = new-object -TypeName System.Object
$sessionInput | Add-Member -MemberType NoteProperty -Name NoteProperty1 -Value @("some", "value")
$sessionInput | Add-Member -MemberType NoteProperty -Name NoteProperty2 -Value @("some", "other", "value)
$session = New-PSSession -ComputerName my-computer -Credential (Get-Credential)
Invoke-Command -Session $session -InputObject $sessionInput {
$input #1
$input | Get-Member #2
$input.NoteProperty1 #3
$input.NoteProperty1 | Get-Member #4
}

对于上面的每一行,我都得到了以下输出。

1. $input
所以,首先我尝试了我通常的将变量转储到控制台的技术,这证实了这些属性是通过预期值传递的:
NoteProperty1      : {some, value}
NoteProperty2 : {some, other, value}
PSComputerName : my-computer
RunspaceId : d1f35c8b-f631-4caa-bae0-f7c0066bbd55
PSShowComputerName : True

2. $input | Get-Member
这比之前的尝试产生了更多的信息:
   TypeName: Deserialized.System.Object

WARNING: column "PSComputerName" does not fit into the display and was removed.

Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString(), string ToString(string format, System.IFormatProvider formatProvider)
NoteProperty1 NoteProperty Deserialized.System.String[] NoteProperty1=some val...
NoteProperty2 NoteProperty Deserialized.System.String[] NoteProperty2=some oth...

请注意,最后两行清楚地表明远程 session 接收到的对象上存在 NoteProperty。所有这些提到的 Deserialized开始激起我的兴趣...

3. $input.NoteProperty1
前两个运气不错,我开始尝试检查 NoteProperty1本身。然而,这个属性的值似乎是空的;使用上面的行 $input.NoteProperty1 -eq $null 不会将任何内容写入控制台返回真。

4. $input.NoteProperty1 | Get-Member
所以,最后,我试图检查 NoteProperty1值直接通过 Get-Member ,它以消息“未向 get-member cmdlet 指定对象。”而惨遭失败,这与传递给 Get-Member 的空对象一致。

帮助!

所以,我现在完全不知所措:这个薛定谔属性(property)既存在又不存在;两者都有期望值,也没有值。我想我可以用稍微不同的方式来写这个,这将消除对 NoteProperties 的需要,但我很想知道这里发生了什么!

最佳答案

选择对象获胜! :)

$SessionInput = New-Object -TypeName System.Object
$SessionInput | Add-Member -MemberType NoteProperty -Name NoteProperty1 -Value @("some", "value")
$SessionInput | Add-Member -MemberType NoteProperty -Name NoteProperty2 -Value @("some", "other", "value")
$Session = New-PSSession -ComputerName 127.0.0.1
Invoke-Command -Session $Session -InputObject $SessionInput {
[array]$NoteProperty1 = $Input | Select -Expand NoteProperty1
for ($i = 0; $i -lt $NoteProperty1.Count; $i ++)
{
Write-Host -ForeGroundColor "Magenta" $i
$NoteProperty1[$i]
}
}

对于字符串变量,您仍然需要像这样在 select 语句中扩展字符串:
$SessionInput = New-Object -TypeName System.Object
$SessionInput | Add-Member -MemberType NoteProperty -Name NoteProperty1 -Value "SomeValue"
$Session = New-PSSession -ComputerName 127.0.0.1
Invoke-Command -Session $Session -InputObject $SessionInput {
$NoteProperty1 = $Input | Select -Expand NoteProperty1
$NoteProperty1
}

关于powershell - 如何将 InputObject 上的 NoteProperties 访问到远程处理 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9775272/

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