我是Powershell的新手,所以脚本是其他工作的混合体,为满足我的需求而编辑。
当通过 ISE 运行时,它可以完美运行,但是当它通过控制台运行或从脚本调用时,它会失败,并且它创建的文本文件为空。
尝试了各种参数,如no-exit
,-sta
没有运气,文件仍然是空白的。
$RemoteComputers = "xxxxxx"
Clear-Host
foreach ($Computer in $RemoteComputers) {
$computerSystem = get-wmiobject Win32_ComputerSystem -Computer $Computer
$computerBIOS = get-wmiobject Win32_BIOS -Computer $Computer
$computerOS = get-wmiobject Win32_OperatingSystem -Computer $Computer
$computerCPU = get-wmiobject Win32_Processor -Computer $Computer
$computerHDDs = Get-WmiObject Win32_LogicalDisk -ComputerName $Computer -Filter drivetype=3
$Hddtest = Get-WmiObject -Class Win32_LogicalDisk -computername $Computer -filter drivetype=3
write-output "System Information for: " $computerSystem.Name
"Manufacturer: " + $computerSystem.Manufacturer
"Model: " + $computerSystem.Model
"Serial Number: " + $computerBIOS.SerialNumber
"CPU: " + $computerCPU.Name
"RAM: " + "{0:N2}" -f ($computerSystem.TotalPhysicalMemory / 1GB) + "GB"
"IP Address: " + $NetworkConfig.IpAddress
"MAC Address:" + $NetworkConfig.MACAddress
"Operating System: " + $computerOS.caption + ", Service Pack: " + $computerOS.ServicePackMajorVersion
"Last Reboot: " + $computerOS.ConvertToDateTime($computerOS.LastBootUpTime)
""
"Installed HDD'S: " + $computerHDDs.Count
foreach ($computerhdd in $computerhdds) {
"HDD Drive Letter: " + $computerhdd.DeviceID
"HDD Capacity: " + "{0:N2}" -f ($computerHDD.Size / 1GB) + "GB"
"Free Space: " + "{0:P2}" -f ($computerHDD.FreeSpace / $computerHDD.Size) +
"Free (" + "{0:N2}" -f ($computerHDD.FreeSpace / 1GB) + "GB)"
"Used Space:" + "{0:N2}" -f ($computerhdd.Size / 1GB - $computerhdd.FreeSpace / 1GB) + "GB"
}
""
"-------------------------------------------------------"
}
Start-Sleep -Milliseconds 1000
$Text = $psise.CurrentPowerShellTab.ConsolePane.text
set-content -path c:Serverinfo.txt $text
$file = "C:serverinfo.txt"
$mailsettings = @{
'SmtpServer' = "xxxxx"
'To' = "xxxxx" #, "xxxx"
'From' = " Sxxxxxx>"
'Subject' = "Server System Info"
'Body' = "xxxxxx"
'Attachments' = $file
}
Send-MailMessage @mailsettings
可以使用
$psise.CurrentPowerShellTab.ConsolePane.text
从控制台输出中获取计算机信息,而是可以将该输出直接分配给 $text
变量:
$text = foreach ($Computer in $RemoteComputers) {
然后与Set-Content -path $file $text
一起使用,以创建包含计算机信息的文件。
更新后的代码只有微小的更改:
$RemoteComputers = "computer1","computer2"
$file = "C:serverinfo.txt"
$text = foreach ($Computer in $RemoteComputers) {
$computerSystem = get-wmiobject Win32_ComputerSystem -Computer $Computer
$computerBIOS = get-wmiobject Win32_BIOS -Computer $Computer
$computerOS = get-wmiobject Win32_OperatingSystem -Computer $Computer
$computerCPU = get-wmiobject Win32_Processor -Computer $Computer
$computerHDDs = Get-WmiObject Win32_LogicalDisk -ComputerName $Computer -Filter drivetype=3
"System Information for: " + $computerSystem.Name
"Manufacturer: " + $computerSystem.Manufacturer
"Model: " + $computerSystem.Model
"Serial Number: " + $computerBIOS.SerialNumber
"CPU: " + $computerCPU.Name
"RAM: " + "{0:N2}" -f ($computerSystem.TotalPhysicalMemory / 1GB) + "GB"
"IP Address: " + $NetworkConfig.IpAddress
"MAC Address:" + $NetworkConfig.MACAddress
"Operating System: " + $computerOS.caption + ", Service Pack: " + $computerOS.ServicePackMajorVersion
"Last Reboot: " + $computerOS.ConvertToDateTime($computerOS.LastBootUpTime)
""
"Installed HDD'S: " + $computerHDDs.Count
foreach ($computerhdd in $computerhdds) {
"HDD Drive Letter: " + $computerhdd.DeviceID
"HDD Capacity: " + "{0:N2}" -f ($computerHDD.Size / 1GB) + "GB"
"Free Space: " + "{0:P2}" -f ($computerHDD.FreeSpace / $computerHDD.Size) +
"Free (" + "{0:N2}" -f ($computerHDD.FreeSpace / 1GB) + "GB)"
"Used Space:" + "{0:N2}" -f ($computerhdd.Size / 1GB - $computerhdd.FreeSpace / 1GB) + "GB"
}
""
"-------------------------------------------------------"
}
Set-Content -path $file $text
$mailsettings = @{
'SmtpServer' = "xxxxx"
'To' = "xxxxx" #, "xxxx"
'From' = " Sxxxxxx>"
'Subject' = "Server System Info"
'Body' = "xxxxxx"
'Attachments' = $file
}
Send-MailMessage @mailsettings