如何直接使用 powershell 对象属性而不进行类型转换和拆分?

如何直接使用 powershell 对象属性而不进行类型转换和拆分?

我已经创建了一个小脚本,用于将 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"}

相关内容