如何直接使用PowerShell对象属性,而不需要types转换和分割?

我已经创build了一个小的脚本,以将一个名为pssfulllocation的Active Directory pc属性的值从一台PC传输到另一台PC。

为了达到这个目标,我必须使用types转换+分割。

这是有效的脚本

$oldpc=read-host "Enter old pc name" $newpc=read-host "Enter new pc name" $my=Get-ADComputer -Identity $oldpc -Properties * | select pssfulllocation $itemcast=[string]$my $b = $itemcast.Split("=")[1] $c=$b.Split("}")[0] Set-ADComputer -identity $newpc -Replace @{pSSFullLocation="$c"} 

和输出将很好地做预期的工作 ..以这种方式..这是所需的结果 ..

在这里输入图像说明

但是,如果我不使用types转换+分割按照下面的脚本 –

 $oldpc=read-host "Enter old pc name" $newpc=read-host "Enter new pc name" $my=Get-ADComputer -Identity $oldpc -Properties * | select pssfulllocation Set-ADComputer -identity $newpc -Replace @{pSSFullLocation="$my"} 

输出是低于..这不是我想要的..

在这里输入图像说明

简而言之,如果我不使用types转换+分割输出将被添加为@ {pSSFullLocation = C / BRU / B / 0 / ADM / 1,但它只能被添加为C / BRU / B / 0 / ADM / 1按照这个:

在这里输入图像说明

我觉得typecasting +分裂应该是一个解决方法,而不是正确的方法..任何其他PowerShell的方式来实现这一点,而不使用types转换+拆分?

不要这样做:

 $my=Get-ADComputer -Identity $oldpc -Properties * | select pssfulllocation 

您不要Select-Object来访问属性的值。 请注意cmdlet名称中的-Object ,而不是-Object 。 而是收集由Get-AdComputer返回的对象,然后直接使用该属性。

 $my = Get-ADComputer -Identity $oldpc -Properties * $psfl = $my.pSSFullLocation Set-ADComputer -identity $newpc -Replace @{pSSFullLocation="$psfl"} 

甚至可以做这个工作“-expandproperty”

 $oldpc=read-host "Enter old pc name" $newpc=read-host "Enter new pc name" $my=Get-ADComputer -Identity $oldpc -Properties * | select -expandproperty pssfulllocation Set-ADComputer -identity $newpc -Replace @{pSSFullLocation="$my"}