目前在寫一個針對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運行是可以的,
