目前在寫一個針對Server管理的程式
希望是做到說
step1. 讀取Server清單
step2. Ping Server清單內的主機是否活著
step3. 如果活著 –> 去get windows update check& install 時間 & 重開機時間,並且列出來主機名稱 ,
Server Name / WSUS Update Time / WSUS Check Time / Server Reboot Time
step4. 如果主機ping不到.則寫到一個txt內
目前想法
foreach ( $srvlist = Get-Content “D:\srvlist.txt” ) ==>把檔案讀到 變數內,
if ( $strQuery = “select * from win32_pingstatus where address = $srvlist “” ” ) ==> 判斷是否活著
如果活著,運行下列的指列碼
Get-WmiObject -class Win32_OperatingSystem -computer $srvlist | Select-Object __SERVER,@{label=’LastBootUpTime’;expression={$_.ConvertToDateTime($_.LastBootUpTime)}}
Get-ItemProperty -Path ‘HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\Detect’ -Name LastSuccessTime | select -ExpandProperty LastSuccessTime
Get-ItemProperty -Path ‘HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\Install’ -Name LastSuccessTime | select -ExpandProperty LastSuccessTime
在請各位先進幫忙指點一二,因為我才剛學Powershell 1個月左右,謝謝。
# 待测试主机列表文件 $srvlist = “D:\serverlist.txt” # 无响应主机列表文件 $failedServerList = “D:\failedServer.txt” # 扫描结果文件 $resultFile = "D:\result.txt" foreach($server in Get-Content$srvlist) { #确保机器名前后没有空格 $server=$server.Trim() if([string]::IsNullOrEmpty($server)){ #遇到空行跳过,检查下一个 continue } # Ping 主机 if(Test-Connection $server -Count 1 -Quiet) { # 上次开机时间 $LastBootUpTime = Get-WmiObject -class Win32_OperatingSystem | foreach { $_.ConvertToDateTime($_.LastBootUpTme)} #注意:如果你当前用户没有远程机器的权限,可能需要你提供用户名和密码,使用Get-WmiObject -Credential参数 # 上次更新扫描时间 $LastWinUpdateDetect # 上次更新安装时间 $LastWinUpdateInstall # 注意:你扫描注册表的脚本本身没有问题,关键是让它要在远程机器上运行。 [microsoft.win32.registrykey]::OpenRemoteBaseKey # 具体请参考:https://msdn.microsoft.com/en-us/library/8zha3xws(v=vs.110).aspx # 保存数据 "$server $LastWinUpdateDetect $LastWinUpdateInstall $LastBootUpTime" | Out-File $resultFile -Append } else{ # Ping 不通 "$server Ping不通。" | Out-File $failedServerList -Append } }
Dear Mooser :感謝您的幫忙回覆,因為電腦都在Domain內,我是有Domain admin的權限,所以以單行試過遠程的機器運行,用Domain運行是可以的,