我没有找到正确的方法。我想学习如何从Get-GPO中捕获ID而不需要额外的“Id:”行。当我试图删除第一部分;我知道我正在使用“BaseType of System.Object”而不是数组。所以我没有找到任何简单的方法来删除它或选择ID它是自己没有额外的文本。 谢谢你的帮助。 我知道“默认域策略”ID始终是相同的ID) 以下是我试图运行的示例以及我想要获得的示例。
$test = Get-GPO "Default Domain Policy" | select id
$test
--- ---结果
Id
--
31b2f340-016d-11d2-945f-00c04fb984f9
---我正在寻找的结果----
31b2f340-016d-11d2-945f-00c04fb984f9
答案 0 :(得分:2)
这很简单......在Select
命令中使用参数-ExpandProperty
(我总是只使用-Expand
)
PS C:\windows\system32> $test = Get-GPO "Default Domain Policy" | select -Expand id | Select -Expand GUID
PS C:\windows\system32> $test
31b2f340-016d-11d2-945f-00c04fb984f9
简单的答案是:
$test = Get-GPO "test1" | select -ExpandProperty id
$Test = $Test.Guid
$test
编辑:哇,我把这个挂了两年?我的不好......为了扩展删除空白条目,GPO对象有几个属性。其中一个属性是Id
,其类型为[System.Guid]
,并且具有Guid
属性,这是获取GPO的GUID的最终目标。 Guid
属性的类型为[System.String]
,并且肯定有.Trim()
方法。现在,如果您有多个项目,并且并非所有项目都具有Id
属性,或者并非所有Id
属性都具有Guid
属性,并且您通过它们进行迭代,那么您将结束输出数组时使用空格。为了避免这种情况,我们首先遍历Id
属性,然后为每个属性迭代Guid
属性,最后以空字符串,空值和无关新行的形式删除额外的空格在一个多行字符串中(我们真的不应该得到任何最后一个字符串,因为这些是GUID,但我只是在这里彻底了。)
这一次,我将使用简写%
代替Select -Expand
。 %
实际上是ForEach-Object
的别名,基本上我在这里做的就是为每个GPO告诉它,给我Id属性的值,然后为每个人提供Guid值。
$test = Get-GPO "Default Domain Policy" | % id | % GUID | ?{!([string]::IsNullOrWhitespace($_))} | %{$_.Trim()}
当我使用Get-GPO -all
测试时,输出结果后,我得到了超过1500个GUID的墙。没有空格,没有空行,只有很多很多的GUID。
答案 1 :(得分:0)
我也遇到了这个问题,也发现了相同的行为。
如果使用-expandproperty ID
(或(Get-GPO "Default Domain Policy).Id
),则会得到GUID
作为标题,而不再是ID
。疯狂的PS ...
所以对我来说这看起来像是嵌套的。 如果您希望像我一样“干净”,因为您也不喜欢上面建议的修整,则可以尝试以下两种方法:
((Get-GPO "Default Domain Policy").Id).Guid
-我的个人喜好(Get-GPO "Default Domain Policy") | select id -ExpandProperty id | select guid -ExpandProperty guid
或两者的混合。任何一个都只是将您的GUID作为字符串返回。