我已经创建了一个小脚本,用于将 Active Directory PC 属性(称为 pssfulllocation)的值从一台 PC 传输到另一台 PC。
为了实现这一点,我必须使用类型转换 + 拆分。
这是有效的脚本
$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"}
输出将很好地完成了预期的工作以这种方式..这是期望结果..
但是如果我不按照以下脚本使用类型转换 + 拆分--
$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"}
输出如下..不是我想..
简而言之,如果我不使用类型转换 + 拆分输出将被添加为 @{pSSFullLocation=C/BRU/B/0/ADM/1,但它应该仅按以下方式添加为 C/BRU/B/0/ADM/1:
我觉得类型转换 + 拆分应该是一种解决方法,而不是正确的方法。还有其他任何 powershell 方法可以在不使用类型转换 + 拆分的情况下实现这一点吗?
答案1
不要这样做:
$my=Get-ADComputer -Identity $oldpc -Properties * | select pssfulllocation
您不需要Select-Object
访问属性的值。请注意cmdlet 名称中的-Object
,而不是-Attribute
。相反,收集返回的对象,Get-AdComputer
然后直接使用该属性。
$my = Get-ADComputer -Identity $oldpc -Properties *
$psfl = $my.pSSFullLocation
Set-ADComputer -identity $newpc -Replace @{pSSFullLocation="$psfl"}
答案2
或者也可以这样做“-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"}