請問一個Powershell 問題


PowerShell交流中心請問一個Powershell 問題
0
vincent asked 9 年 ago

目前在寫一個針對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個月左右,謝謝。

0 Answers
1
Mooser Lee 管理员 answered 9 年 ago
# 待测试主机列表文件
$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

 }
}
vincent replied 9 年 ago

Dear Mooser :感謝您的幫忙回覆,因為電腦都在Domain內,我是有Domain admin的權限,所以以單行試過遠程的機器運行,用Domain運行是可以的,