郭建偉
對(duì)于本本用戶來(lái)說(shuō),為了發(fā)揮其功能,就需要經(jīng)常對(duì)其進(jìn)行管理和維護(hù)。在一般情況下,我們會(huì)使用各種工具軟件,對(duì)本本進(jìn)行管控操作。其實(shí),在Windows中已經(jīng)內(nèi)置了PowerShell這一高效的管理工具,完全可以實(shí)現(xiàn)各種管理和維護(hù)功能。隨著Windows版本的演進(jìn),PowerShell也變得越來(lái)越成熟和實(shí)用。下面就從多個(gè)方面,講解如何使用PowerShell命令,對(duì)本本進(jìn)行管理操作。
輕松管理本本賬戶
這里以Windows 10環(huán)境為例,來(lái)介紹相關(guān)的PowerShell命令。例如,在PowerShell中執(zhí)行“$Password=ConvertTo-SecureString”123.com“-AsPlainText-Force”命令,產(chǎn)生內(nèi)容為“123.com”的密碼項(xiàng)。執(zhí)行“New-LocaIUser-Name adminuser-Password $Password-AccountNeverExpires Add-LocalGroupMember-Group administrators-Member adminuser”命令,創(chuàng)建名為“adminuser”的賬戶。
使用上述密碼,并將其添加到Administrators組中。如果想更改其密碼,可以先執(zhí)行“$Password=ConvertTo-SecureString”123456.com“-AsPlainText-Force”命令,設(shè)置內(nèi)容為“123456.com”的密碼項(xiàng)。之后執(zhí)行“Set-LocalUser-Name adminuser-Password$Password”命令,為該賬戶設(shè)置新的密碼。如果想刪除該賬戶,可以執(zhí)行“Remove-LocalUser-Name adminuser”命令即可。執(zhí)行“whoami/user”命令,可以查看當(dāng)前賬戶的名稱和SID。執(zhí)行“wmic useraccount get name,sid”命令可以查看所有賬戶的登錄信息。
自動(dòng)備份本本日志信息
不管是系統(tǒng)還是應(yīng)用程序,日志的作用都是極為重要的。利用日志,不僅可以跟蹤和紀(jì)錄本本的運(yùn)行狀態(tài),在出現(xiàn)問(wèn)題時(shí),還可以根據(jù)日志來(lái)準(zhǔn)確排錯(cuò)。例如,點(diǎn)擊Win+R鍵,執(zhí)行“eventvwr.msc”程序,在事件管理器中可以查看系統(tǒng)日志信息。也可以利用PowerShell命令進(jìn)行查看,例如執(zhí)行“Get-EventLog-LogName system-Newest 100”命令,查看最新的100條系統(tǒng)日志信息。
在默認(rèn)情況下,打開“C:\Windows\system32\winevt\logs”目錄,可以看到各種日志信息,例如“Application.evtx”表示應(yīng)用程序日志,“system.evtx”表示系統(tǒng)日志等。在一般情況下,日志的大小為20MB,如果日志長(zhǎng)度超過(guò)該值,那么新的日志就會(huì)覆蓋舊的日志,這樣可以避免磁盤空間被過(guò)度占用。但是,在很多時(shí)候,這種簡(jiǎn)單的覆蓋操作并不能滿足實(shí)際的需求,需要對(duì)日志進(jìn)行定期備份,以便于進(jìn)行安全審計(jì)等操作。
例如,在PowerShell中執(zhí)行“$LogFile=Get-WmiObject-Class Win32_NTEventLogFile|Where-Object{$_.LogFileName-eq 'System')”命令,可以獲取系統(tǒng)日志的文件信息。這里使用了“Get-WmiObject”函數(shù)來(lái)調(diào)用名為“Win32_NTEventLogFile”的WMI類,該類的作用主要是處理系統(tǒng)日志。如果將“'System'”替換為“'Application'”或者“'Security'”,則可以獲取應(yīng)用程序或者安全日志信息。執(zhí)行“$Date=Get-Date”命令,獲取當(dāng)前的時(shí)間信息。
執(zhí)行“$bffile='e:\logbak\'+$LogFileName+$Date.Year.ToString()+ $Date.Month.ToString()+ $Date.Day.ToString()+”.evtx""命令,可以將當(dāng)前時(shí)間信息中的年月日的值提取出來(lái),和日志名稱組合起來(lái),加上“.evtx”后綴,來(lái)組成備份路徑名稱。
這里的備份文件存儲(chǔ)在“e:\logbak”目錄下。執(zhí)行“$LogFile.B ackupEventLog($bffile)”命令,進(jìn)行日志的備份操作,得到所需的日志備份文件。執(zhí)行“Clear-EventLog-LogName'Security'”命令,清除當(dāng)前指定的日志信息。為了便于使用,可以將上述命令保存為“autobaklog.ps1”文件。打開任務(wù)計(jì)劃窗口,在右側(cè)點(diǎn)擊“創(chuàng)建基本任務(wù)”項(xiàng),在向?qū)Ы缑嬷休斎朐撊蝿?wù)的名稱(例如“定時(shí)備份系統(tǒng)日志”),點(diǎn)擊下一步按鈕,在“希望該任務(wù)何時(shí)開始”欄中選擇“每天”項(xiàng)。
在下一步窗口中設(shè)置開始日期和觸發(fā)時(shí)間,在“每隔”欄中輸入具體的周期數(shù),例如“30”表示每隔30天執(zhí)行一次。點(diǎn)擊下一步按鈕,選擇“啟動(dòng)程序”項(xiàng)。在下一步窗口(圖1)中點(diǎn)擊瀏覽按鈕,選擇“c:\windows\system32\WindowsPowershell\v1.0\powershell.exe”程序,在“添加參數(shù)”欄中輸入“d:\autobaklog.ps1”,這里假設(shè)將該腳本文件保存在D盤中。之后點(diǎn)擊完成按鈕,創(chuàng)建該任務(wù)。
這樣,當(dāng)?shù)竭_(dá)預(yù)設(shè)的時(shí)間后,就可以自動(dòng)備份所需的日志了。同理,對(duì)于目標(biāo)程序的日志備份也可以使用類似的方法來(lái)實(shí)現(xiàn)。首先需要了解目標(biāo)程序的日志存儲(chǔ)路徑,這里假設(shè)為“d:\exchage\log”,日志文件后綴為“.log”。在PowerShell中執(zhí)行“$LogFile=Get-Childltem-Path'd:\exchage\log'-Recurse-Filter"*.log"”命令,根據(jù)指定的日志路徑,得到目標(biāo)程序全部的日志文件信息,包括子目錄中的日志文件。執(zhí)行“$Date=Get-Date”命令,獲取當(dāng)前的時(shí)間信息。
執(zhí)行“$BakLogPath='e:\logdata\exchange\'+$Date.Year.ToString()+ $Date.Month.ToString()+ $Date.Day.ToString()+"\"”命令,提取當(dāng)前時(shí)間信息中的年月日的值組合成備份路徑名稱,這里備份路徑為“e:\logdata\exchange”。所有的備份文件都保存在該路徑下。執(zhí)行“New-Item-Path$BakLogPath-ItemType Directory”命令,按照上述組合的名稱,在指定備份路徑下創(chuàng)建備份目錄。執(zhí)行“$LogFiles|Copy-Item-Destination $BakLogPath”命令,將所有的日志文件復(fù)制到該備份目錄中。執(zhí)行“$LogFile|Remove-Item”命令,清理當(dāng)前的日志文件??梢园凑丈鲜龇椒?,在計(jì)劃任務(wù)窗口中為其創(chuàng)建對(duì)應(yīng)的定時(shí)備份任務(wù),例如每隔10天執(zhí)行一次備份操作等。
查看本本網(wǎng)絡(luò)配置信息
使用PowerShell可以進(jìn)行網(wǎng)絡(luò)初始化操作,獲取網(wǎng)卡信息,配置IP/默認(rèn)網(wǎng)關(guān)/DNS服務(wù)器地址等。因?yàn)樵赑owerShell中提供了不同的Module,在每個(gè)Module中提供了不同的命令和函數(shù),可以執(zhí)行各種配置操作。執(zhí)行“Get-NetAdapter”命令,顯示所有的網(wǎng)卡設(shè)備。執(zhí)行“Get-NetIPAddress”命令,顯示所有網(wǎng)卡的詳細(xì)IP地址信息。這些命令實(shí)際上是由不同的Module來(lái)提供的,執(zhí)行“Get-Command Get-NetAdapter”命令,在“Source”列中顯示提供該函數(shù)具體的Module的名稱。
例如想查看名為“NetAdapter”這個(gè)Module的函數(shù),可以執(zhí)行“Get-Command-Module NetAdapter”命令,顯示該Module中提供的所有函數(shù)。執(zhí)行“Get-Command-Module NetAdapter Imeasure”命令,顯示具體的函數(shù)數(shù)量。執(zhí)行“Get-Command-Module NetAdapter-Verb get”命令,可以查看在該Module中獲取信息的函數(shù)。例如執(zhí)行“Get-NetAdapterAdvancedProperty-name Management”命令,顯示關(guān)于名為“Management”這款網(wǎng)卡的高級(jí)屬性信息。執(zhí)行“Get-Command-Module NetAdapter-Verb set”命令,可以查看該Module中相關(guān)的設(shè)置函數(shù)。
例如執(zhí)行“Get-NetAdapter|where{$_.ifindex-eq 6)|Rename-NetAdapter-name"newAdapter"”命令,可以將選定的網(wǎng)卡更名為“netAdapter”,該命令中的“6”表示該網(wǎng)卡的索引編號(hào),在查看網(wǎng)卡信息的命令中會(huì)顯示該編號(hào)。注意,該命令需要以管理員身份運(yùn)行PowerShell。執(zhí)行“Get-NetAdapter|where{$_.ifindex-eq 6}|New-NetIPAddress-IPAddress 192.168.1.50-DefaultGateway'192.168.1.1-PrefixLength 24”命令,就可以針對(duì)目標(biāo)網(wǎng)卡設(shè)置其IP和默認(rèn)網(wǎng)關(guān)信息。執(zhí)行“Set-DnsClientServerAddress-InterfaceIndex 6-ServerAddresses'192.168.1.50'”命令,可以設(shè)置目標(biāo)網(wǎng)卡的DNS服務(wù)器地址,其中的“6”表示該網(wǎng)卡的索引編號(hào)。執(zhí)行“Get-Module”命令,顯示使用過(guò)的或者已經(jīng)加載的Module。
為本本巧設(shè)磁盤報(bào)警器
對(duì)于現(xiàn)在的系統(tǒng)和軟件來(lái)說(shuō),不僅體積比較龐大,而且產(chǎn)生的數(shù)據(jù)(例如日志等)也比較占用磁盤空間。如果磁盤空間不足,就可能出現(xiàn)各種奇怪的故障。對(duì)于本本的系統(tǒng)盤來(lái)說(shuō),此類情況尤為常見。如果本本可以在磁盤容量低于警戒值后,自動(dòng)向您的手機(jī)發(fā)送短信,就可以及時(shí)提醒您對(duì)磁盤進(jìn)行優(yōu)化,擴(kuò)充其容量,避免可能由此引發(fā)的故障。
實(shí)際上,現(xiàn)在移動(dòng)服務(wù)運(yùn)行商都為用戶免費(fèi)提供了郵件提醒功能,當(dāng)然,服務(wù)器需要能夠訪問(wèn)Internet方可。當(dāng)郵箱收到郵件后,可以自動(dòng)向用戶的手機(jī)發(fā)送短信,這樣就可以輕松實(shí)現(xiàn)磁盤容量短信報(bào)警功能。在PowerShell中執(zhí)行“$Disklist=Get-Volume”命令,獲取當(dāng)前系統(tǒng)的磁盤信息。
執(zhí)行“foreach($volletter in$Disklist){”命令,開啟一個(gè)循環(huán),將獲取的每個(gè)磁盤信息賦予名為“Volletter”的變量。執(zhí)行“if($Volletter.DriveType-eq"Fixed"-and$Volletter.FileSystemLabel-ne"系統(tǒng)保留”){”命令,將非硬盤分區(qū)以及系統(tǒng)保留分區(qū)全部清除,只保留可用的硬盤分區(qū)。
執(zhí)行“[int]$kyrl=$Volume.SizeRemaining/1GB”命令,將當(dāng)前硬盤分區(qū)的可用容量轉(zhuǎn)換為GB單位。執(zhí)行“if($kyrl-lt 5){”命令,如果當(dāng)前硬盤分區(qū)可用容量小于5GB,那么就觸發(fā)預(yù)設(shè)的動(dòng)作。
執(zhí)行“$Date=Get-Date”命令,獲取當(dāng)前的時(shí)間信息。執(zhí)行“$fjr="user@163.com"”“$sjr="xxxxxx@mixazure.com"”“$zhuti=$Volume.DriveLetter+"磁盤容量告警””“$neirong="該硬盤分區(qū)可用空間小于指定值,請(qǐng)清理磁盤空間!"”“$SMTPfwq="smtp.xxx.com"”命令,設(shè)置發(fā)件人信息,這里假設(shè)為“user@163.com”,并設(shè)置收件人信息,“xxx”為收件人手機(jī)號(hào)碼。設(shè)置郵件的主題為磁盤不足的報(bào)警信息,并顯示具體的磁盤盤符,在郵件內(nèi)容部分設(shè)置具體的提醒信息。
執(zhí)行“$Password=ConvertTo-SecureString"p@asswOrd"-AsPlainText-Force”命令,設(shè)置當(dāng)前賬戶的密碼信息,這里密碼為“p@asswOrd”。執(zhí)行“$cred=New-Object System.Management.Automation.PSCredential("xxx\aduser",$Password)”命令,設(shè)置憑證信息,其中的域名為“xxx”,賬戶名為“aduser”。執(zhí)行“Send-MailMessage-To $sjr-From $fjr-Subject$zhuti-Body $neirong-SmtpServer $SMTPfwq-Credential $cred-Encoding UTF8)))”命令,使用“Send-MailMessage”函數(shù),并結(jié)合上述指定的收件人、發(fā)件人、主題、郵件內(nèi)容等預(yù)設(shè)信息,以指定的賬戶身份發(fā)送郵件。
當(dāng)執(zhí)行以上命令后,就可以對(duì)所有的硬盤分區(qū)間磁盤進(jìn)行掃描,如果某個(gè)分區(qū)的容量低于預(yù)設(shè)值,就發(fā)送郵件信息進(jìn)行提醒,郵箱隨即會(huì)以短信的形式發(fā)送到管理員的手機(jī)上。為了實(shí)現(xiàn)自動(dòng)檢測(cè)操作,可以按照上述方法,將上述命令行保存為獨(dú)立的腳本文件,創(chuàng)建所需的計(jì)劃任務(wù)項(xiàng)目,在每天的指定時(shí)間(例如凌晨0點(diǎn)等),執(zhí)行該計(jì)劃任務(wù)。打開該任務(wù)的屬性窗口,在“觸發(fā)器”面板中選擇當(dāng)前的觸發(fā)器項(xiàng)目,點(diǎn)擊“編輯”按鈕,在打開窗口(圖2)中選擇“重復(fù)任務(wù)間隔”項(xiàng),設(shè)置重復(fù)執(zhí)行的周期(例如30分鐘),這樣每個(gè)指定的時(shí)間,就會(huì)自動(dòng)執(zhí)行本計(jì)劃任務(wù),檢測(cè)所有硬盤分區(qū)的可用容量,如果低于指定值,就會(huì)向管理員發(fā)送報(bào)警短信。
深入查看本本信息
使用PowerShell提供的WMI(即WindowsManagement Instrumentation)機(jī)制,無(wú)須借助任何工具,就可以讓本本用戶輕松獲取系統(tǒng)中的各種信息。其中的某些信息,是無(wú)法利用常規(guī)的GUI方式來(lái)獲取的。例如在PowerShell窗口中執(zhí)行“wmimgmt.msc”命令,在打開窗口中左側(cè)的“WMI控件(本地)”節(jié)點(diǎn)的右鍵菜單上點(diǎn)擊“屬性”項(xiàng),就會(huì)和本地的WMI服務(wù)建立連接,在屬性窗口(圖3)中的“常規(guī)”面板中顯示W(wǎng)MI的版本和類庫(kù)位置信息,其默認(rèn)位置為“C:\Windows\System32\wbem”。
在“安全”面板中打開“Root”節(jié)點(diǎn),會(huì)顯示W(wǎng)MI的命名空間信息,在不同的命令空間節(jié)點(diǎn)中包含著對(duì)應(yīng)的WMI類。當(dāng)使用PowerShell來(lái)訪問(wèn)WMI的類庫(kù),獲取相關(guān)的系統(tǒng)信息時(shí),必須指定對(duì)應(yīng)的入口,這就和上述不同的命令空間相對(duì)應(yīng)的。例如執(zhí)行“Get-WmiObject-Namespace root\cimv2-ClassNameWin32_OperatingSystem”命令,顯示常規(guī)的操作系統(tǒng)信息。其中的“root\cimv2”就是一個(gè)命令空間項(xiàng)目。
執(zhí)行“Get-WmiObject-List-Namespaceroot\cimv2|measure”命令,會(huì)顯示這些類的數(shù)量。因?yàn)樯婕暗念惖臄?shù)量很多,利用PowerShell的篩選功能,可以只顯示指定的類。執(zhí)行“Get-Wmiobject-List-Namespace root\cimv2|where{$_.name-like"*memory*")”命令,會(huì)在其中過(guò)濾與內(nèi)存相關(guān)的類的信息。執(zhí)行“Get-Wmiobject Win32_PhysicalMemory”命令,會(huì)顯示詳細(xì)的內(nèi)存配置信息。注意,其效果與執(zhí)行“Get-WmiObject-Namespaceroot\cimv2-ClassName Win32_PhysicalMemory”命令是等效的。
打開上述屬性窗口的“高級(jí)”面板(圖4),在“腳本程序的默認(rèn)命令空間”欄中顯示“root\cimv2”,所以即使不指定命令空間名稱,PowerShell也會(huì)使用默認(rèn)的名稱。執(zhí)行“Get-Wmiobject Win32_Processor”命令,會(huì)顯示CPU的基本信息。執(zhí)行“Get-Wmiobject Win32_Processor|fl*”命令,會(huì)顯示該CPU的詳細(xì)信息。執(zhí)行“Get-WmiObject-Class Win32_Logicaldisk”命令,顯示基本磁盤信息。也可以執(zhí)行“Get-WmiObject-ClassWin32_Logicaldisk|where{$_.DriveType-eq 3)”等命令,來(lái)篩選指定類型的磁盤信息。
執(zhí)行“Get-WmiObject-Query"select*from Win32_LogicalDisk Where DriveType=3"|fl*”命令,來(lái)顯示硬盤信息。如果將其中的“DriveType”的值修改為0/2/4/5/6,可以顯示未知/移動(dòng)存儲(chǔ)/共享盤/光盤/內(nèi)存盤等磁盤信息。也可以執(zhí)行“Get-WmiObject-Query"select*from Win32_LogicalDiskWhere DriveType=3"|Select-Object@{n="盤符";e={$_.name),@{n="自由空間";e={$_.freespace}/1GB-as[int]}”命令,來(lái)自定義顯示的磁盤信息。
如果想查看目標(biāo)主機(jī)的常用信息,例如名稱、運(yùn)行時(shí)間等,可以執(zhí)行“Get-WmiObject-Class Win32_OperatingSystem-ComputerNameserverl.xxx.com|Select-Object@{n='計(jì)算機(jī)名稱';e={$_.PSComputername}},@{n="安裝時(shí)間";e={$_.ConvertToDateTime($_.InstalIDate)}},@{n="啟動(dòng)時(shí)間";e={$_.ConvertToDateTime($_.LastBootUpTime)}},@{n="系統(tǒng)版本";e={$_.Caption}}”命令,來(lái)獲取相關(guān)的信息。
電腦知識(shí)與技術(shù)·經(jīng)驗(yàn)技巧2020年9期