我正在尝试确定CSV中的用户是否处于活动状态,此外,我还想知道它们是服务帐户、用户帐户还是基于OU的计算机帐户。
一切都很好,直到我尝试输出它...输出在几行上(每个var一行)。
我希望输出在一行(逗号之间,所以我会有一个CSV当我完成)...我已经尝试了二十种不同的方式与四十个不同的结果O_o。
额外的好处:为任何产生错误的名称添加一条消息(即用户不存在...)我正在考虑一个if/else,但还没有能够得到基本的输出行为。
我试过用括号括起来,连接变量,嵌套变量...用棍子打我的电脑...静静地思考我的人生选择...
$Users = Get-Content C:\ActiveUsers.txt
ForEach ($User in $Users){
$properties = Get-ADUser -Identity $User | select SamAccountName,Enabled,DistinguishedName
if (Select-String -Pattern "UserMgt" -InputObject $properties) { $base = "User" }
if (Select-String -Pattern "ApplSec" -InputObject $properties) { $base = "Service Account" }
if (Select-String -Pattern "WkstnMgt" -InputObject $properties) { $base = "Machine Account" }
write-output $properties.SamAccountName $properties.Enabled $base
#$Output = Write-Output $properties.SamAccountName $properties.Enabled $base
#$Output #| out-file C:\UserStatus-OU2.csv -append
}
3条答案
按热度按时间drnojrws1#
要关注问题的 * 一般 * 标题(请参见底部以了解您的 * 特定 * 案例的最佳解决方案):
$a
,$b
,$c
,我如何将它们输出为一个 * 单行字符串 ,并带有 * 可配置的分隔符 ,比如,
?在以下示例中,假设值
'foo'
、'bar'
、'baz'
分别为变量$a
、$b
和$c
的值,可以使用以下(解构)赋值创建这些变量:$a, $b, $c = 'foo', 'bar', 'baz'
.-join
运算符**:这种方法的优点是可以将任意大小的数组用作LHS。
"..."
,管柱插值),如您自己的解决方案所示:-f
,字符串格式化运算符**:至于你所尝试的:
Write-Output $properties.SamAccountName $properties.Enabled $base
将多个参数传递给
Write-Output
,将它们 * 逐个 * 写入管道;如果这些参数是 * 字符串 *,每个字符串在其自己的行 * 上打印 ,如果您将输出发送到Out-File
/>
或Set-Content
,这也适用。也就是说,因为您要为 * CSV文件创建行,最好创建 * 自定义 * 对象来表示行,并使用
Export-Csv
将它们序列化到文件中(基于您问题中的代码,而不是您的答案:请注意单个管道的使用。
nx7onnlm2#
好了,我解决了它,它会更好地作为一个数组,但在这里它是(完整的'错误处理'):
44u64gxh3#
我知道这是一个老问题,但它可能会帮助那些正在寻找一个简单解决方案的人。这个语法对我来说要简单得多: