所以,这个脚本输出了我需要的大部分信息。
然而,在这方面,
1.它不会报告或发布每个服务器上的所有驱动器或列出的所有证书。
1.构建日期显示为20210218123012.000000-300,而不是标准的mm/dd/yyyy
1.驱动器空间显示为39.8967208862305,而不是%
这些都应该与每个服务器名称组合在一起。
Import-Module ActiveDirectory
# Select the servers you want to hit $server = (Get-ADComputer -SearchBase "OU=OU" -filter *).name
$scriptblock = {
# Set the server name
$serverName = $env:computername
# Get the up/down status of the server
$pingResult = Test-Connection -ComputerName $serverName -Count 1
$status = if ($pingResult.StatusCode -eq 0) {
'Up'
}
else {
'Down'
}
# Get the server build date
$os = Get-WmiObject -Class Win32_OperatingSystem
$buildDate = $os.InstallDate
# Get the server certificate validity
$cert = Get-ChildItem -Path Cert:\LocalMachine\My |
Where-Object { $_.PSIsContainer -eq $false } |
Sort-Object -Property NotBefore |
Select-Object -First 1
$validFrom = $cert.NotBefore
$validTo = $cert.NotAfter
#Check Trellix update
$TrellixDate = [datetime](get-itemproperty "C:\Program Files\Common Files\McAfee\Engine\AMCoreUpdater\amupdate.dat").lastwritetime.DateTime
foreach ($disk in (Get-WmiObject -ComputerName $env:computername -Class Win32_LogicalDisk -Filter 'DriveType = 3')) {
$diskLabel = $disk.DeviceID
$freeSpace = $disk.FreeSpace / 1GB
$diskSize = $disk.Size / 1GB
$percent = $freeSpace / $diskSize * 100
}
# Create a custom object with the collected information
$serverInfo = [PSCustomObject]@{
ServerName = $serverName
Status = $status
BuildDate = $buildDate.datetime
CertificateValidFrom = $validFrom
CertificateValidTo = $validTo
TrellixLastUpdate = $TrellixDate
DiskLabel = $diskLabel
Freespace = $freespace
DiskSize = $disksize
Percent = $percent
}
# Export the information to a CSV file
$serverInfo | Export-Csv -Path '\nec\ServerInfo.csv' -NoTypeInformation
}
Write-Host 'Server information exported to ServerInfo.csv'
#command to run the script on the servers
foreach ($server in $servers) {
Invoke-Command -ComputerName $server -ScriptBlock $scriptblock
}
foreach ($server in $servers) {
$CSV = Get-ChildItem -Filter ServerInfo.csv | Select-Object -ExpandProperty FullName | Import-Csv
}
Export-Csv c:\NEC\CombinedFile.csv -NoTypeInformation -Append
字符串
1条答案
按热度按时间guz6ccqo1#
1.它不会报告或发布每个服务器上的所有驱动器或列出的所有证书。
发生这种情况是因为无论有多少证书或磁盘,您都需要创建一个
pscustomobject
,您需要做的是枚举两者(证书和磁盘)并为每个创建一个对象。这将在以下代码中使用for
循环进行演示。.BuildDate
是20210218123012.000000-300
,而不是标准的mm/dd/yyyy
。当使用
Get-WmiObject
针对OperatingSystem
类时,这是此属性的默认格式。在这种情况下,建议不使用此小工具,主要是因为它不再存在于较新版本的PowerShell中,它基本上已经过时。请改用Get-CimInstance
,语法在很大程度上是相同的,这个属性的类型将是DateTime
,它可以很容易地转换成你想要的格式的字符串,几个例子:字符串
另请参阅格式说明符表以供参考。
1.驱动器空间显示为
39.8967208862305
,而不是%
。为此,您可以将
$freeSpace / $diskSize * 100
更改为$freeSpace / $diskSize
并使用P
(Percent)格式说明符,例如:型
另请参阅标准格式说明符以供参考。
最后,代码最终应该是什么样子,除非有特定的需要将CSV存储在每个服务器中,然后从它们中提取信息我不明白为什么你不能直接从
Invoke-Command
捕获输出,而不需要合并每个服务器的输出,这使事情变得更简单。我已经从$scriptblock
中删除了Export-Csv
语句。另外值得注意的是,
Invoke-Command
可以执行并行调用,而不需要foreach
循环,只需将$servers
数组直接传递给小程序。型
最终输出的示例应该类似于:
的数据