我已经创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"}