我正在开发一个脚本,它从CSV中获取主机名,将它们存档到Get-ADComputer,然后将某些对象保存在原始CSV的某些列中。
虽然解决方案看起来像是一个基本任务(下面的代码),我的问题是,Get-ADComputer的输出总是(你可以看到我玩Out-String但也试过其他格式化选项)包含很多NewLine字符或其他格式问题导致CSV混乱。
Clear-Host
Import-Module ActiveDirectory
$import = Import-Csv 'XXX' -Delimiter ';'
Foreach ($row in $import){
$hostname = $row.HOSTNAME
if($hostname.length -gt 3){
$computer = Get-ADComputer -Filter {Name -like $hostname} -Properties LastLogonDate, LastLogonTimeStamp
$row.AD_LastLogon.ToString() = $computer | Select-Object LastLogonDate | Select-Object -first 1 | FT -HideTableHeaders | Out-String
$row.AD_LLTimestamp = $computer | Select LastLogonTimestamp |Select-Object -first 1 | FT -HideTableHeaders | Out-String
}
}
$import | Export-Csv 'XXX' -Delimiter ';' -NoType
我现在的问题是,如果有人可以帮助获取一个方法来获取例如Get-ADComputer's LastLogonDate
的裸字符串结果,而不包含任何格式或标题。
提前致谢!
答案 0 :(得分:2)
使用-ExpandProperty
的{{1}}参数仅提取所需的参数。您一次只能指定一个参数来启动。
Select-Object
我不相信$row.AD_LastLogon = $computer | Select-Object -ExpandProperty LastLogonDate -First 1 | Out-String
$row.AD_LLTimestamp = $computer | Select-Object -ExpandProperty LastLogonTimestamp -First 1
应该是必要的。 Get-ADComputer不应该找到多台同名的计算机。
此外,您不需要检索LastLogonDate和LastLogonTimestamp。 The former is the same value as the latter,刚刚从LastLogonTimestamp使用的恼人的NT Time Epoch转换为DateTime。你有一个需要两者的系统吗?
最后,只是一个注释,但是:
-First 1
没有意义。您无法为方法分配值。如果没有错误或者什么都不做,我会感到惊讶。