【问题标题】:Get-adcomputer field into variable includes cr/lfGet-adcomputer 字段成变量包括 cr/lf
【发布时间】:2019-11-02 02:51:36
【问题描述】:

我正在尝试获取计算机专有名称,将其设置为变量$dname 然后我可以使用禁用计算机命令disable-adaccount -Identity $dname

$hostname 设置为 OK 为 "WIN10TEST1" 使用此命令时

$dname = (Get-ADcomputer -Identity "$hostname" | select DistinguishedName | ft -hide)

这样失败:

disable-adaccount -Identity $dname

禁用-ADAccount:无法将“System.Object[]”转换为类型 参数所需的“Microsoft.ActiveDirectory.Management.ADAccount” '身份'。不支持指定的方法。在行:1 字符:29 + 禁用广告帐户 -Identity $dname +~~~~~~ + CategoryInfo : InvalidArgument: (:) [Disable-ADAccount], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.ActiveDirectory.Management.Commands.DisableADAccount

如果我手动设置变量

$dname=CN=WIN10TEST1,OU=Workstations,DC=somedomain,DC=local
disable-adaccount -Identity $dname   

它工作正常,所以它是变量进来的问题。

检查$dname 中返回的数据时,它会在我需要的数据前后返回cr/lf。我认为这是绊脚石。

$hostname = "WIN10TEST1"
$dname = (Get-ADcomputer -Identity "$hostname" | select DistinguishedName | ft -hide)
disable-adaccount -Identity $dname

注意:检查$dname.....它在数据之前/之后返回cr/lf

我希望得到没有其他数据的distinquishedname 字符串

CN=WIN10TEST1,OU=Workstations,DC=somedomain,DC=local

【问题讨论】:

  • 请勿将 FT 或任何Format-* cmdlet 用于除最终输出到屏幕或纯文本文件之外的任何内容。它们不返回标准对象 - 相反,它们返回包装在格式化代码中的被屠宰的物品。
  • 在玩弄了这个和一些 wmi 选项之后,我意识到无论我做什么,变量 $dname 都没有设置。是否有任何原因其他变量起作用但不是这个?需要在代码中定义变量,或者变量个数之类的吗?
  • 您当前的代码是什么?您仍然只显示已知有缺陷的FT 代码...

标签: powershell


【解决方案1】:

正如@Lee_Dailey 所提到的,没有必要在任何东西上使用 Select 或 Format Table,因为它们仅用于 显示,如果您保存格式化的数据,它们会以意想不到的方式弄乱您的数据数据到一个变量。

使用 Active Directory PowerShell 模块,您可以简单地将计算机对象传递给 Disable-ADAccount,它知道如何识别和处理它:

$computer = Get-ADcomputer -Identity "$hostname"
Disable-ADAccount -Identity $computer

【讨论】:

  • Select, or Format Table on anything because they are meant for display only 不太正确。 [grin] Select-Object 的东西 is 用于处理对象 ... Format-* cmdlet 用于最终屏幕显示或最终输出到纯文本文件。
  • 嗨哈尔,没有选择,所有字段都返回该计算机对象。我只想要 DistinquiishedName,因为 disable-Adaccount 只支持几个字段。还有其他方法可以获取此字段吗?
  • 您要解决什么问题?从技术上讲,您不需要Get-ADComputer 来获取计算机帐户。如果您有机器列表,您可以直接将 SAM 帐户名称传递给 Disable-ADAccount。您不需要专门传递专有名称。
猜你喜欢
  • 1970-01-01
  • 2011-01-27
  • 2011-03-07
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
相关资源
最近更新 更多