【问题标题】:Powershell script works through ISE but not the consolePowershell 脚本通过 ISE 工作,但不能通过控制台工作
【发布时间】:2018-03-07 03:02:00
【问题描述】:

我是 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

标签: powershell


【解决方案1】:

您可以将该输出直接分配给您的$text 变量,而不是使用$psise.CurrentPowerShellTab.ConsolePane.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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 2020-06-08
    • 2017-08-05
    • 2011-05-19
    相关资源
    最近更新 更多