APP下载

巧用PS命令,灵活管理本本

2020-01-16郭建伟

电脑知识与技术·经验技巧 2020年9期
关键词:本本磁盘网卡

郭建伟

对于本本用户来说,为了发挥其功能,就需要经常对其进行管理和维护。在一般情况下,我们会使用各种工具软件,对本本进行管控操作。其实,在Windows中已经内置了PowerShell这一高效的管理工具,完全可以实现各种管理和维护功能。随着Windows版本的演进,PowerShell也变得越来越成熟和实用。下面就从多个方面,讲解如何使用PowerShell命令,对本本进行管理操作。

轻松管理本本账户

这里以Windows 10环境为例,来介绍相关的PowerShell命令。例如,在PowerShell中执行“$Password=ConvertTo-SecureString”123.com“-AsPlainText-Force”命令,产生内容為“123.com”的密码项。执行“New-LocaIUser-Name adminuser-Password $Password-AccountNeverExpires Add-LocalGroupMember-Group administrators-Member adminuser”命令,创建名为“adminuser”的账户。

使用上述密码,并将其添加到Administrators组中。如果想更改其密码,可以先执行“$Password=ConvertTo-SecureString”123456.com“-AsPlainText-Force”命令,设置内容为“123456.com”的密码项。之后执行“Set-LocalUser-Name adminuser-Password$Password”命令,为该账户设置新的密码。如果想删除该账户,可以执行“Remove-LocalUser-Name adminuser”命令即可。执行“whoami/user”命令,可以查看当前账户的名称和SID。执行“wmic useraccount get name,sid”命令可以查看所有账户的登录信息。

自动备份本本日志信息

不管是系统还是应用程序,日志的作用都是极为重要的。利用日志,不仅可以跟踪和纪录本本的运行状态,在出现问题时,还可以根据日志来准确排错。例如,点击Win+R键,执行“eventvwr.msc”程序,在事件管理器中可以查看系统日志信息。也可以利用PowerShell命令进行查看,例如执行“Get-EventLog-LogName system-Newest 100”命令,查看最新的100条系统日志信息。

在默认情况下,打开“C:\Windows\system32\winevt\logs”目录,可以看到各种日志信息,例如“Application.evtx”表示应用程序日志,“system.evtx”表示系统日志等。在一般情况下,日志的大小为20MB,如果日志长度超过该值,那么新的日志就会覆盖旧的日志,这样可以避免磁盘空间被过度占用。但是,在很多时候,这种简单的覆盖操作并不能满足实际的需求,需要对日志进行定期备份,以便于进行安全审计等操作。

例如,在PowerShell中执行“$LogFile=Get-WmiObject-Class Win32_NTEventLogFile|Where-Object{$_.LogFileName-eq 'System')”命令,可以获取系统日志的文件信息。这里使用了“Get-WmiObject”函数来调用名为“Win32_NTEventLogFile”的WMI类,该类的作用主要是处理系统日志。如果将“'System'”替换为“'Application'”或者“'Security'”,则可以获取应用程序或者安全日志信息。执行“$Date=Get-Date”命令,获取当前的时间信息。

执行“$bffile='e:\logbak\'+$LogFileName+$Date.Year.ToString()+ $Date.Month.ToString()+ $Date.Day.ToString()+”.evtx""命令,可以将当前时间信息中的年月日的值提取出来,和日志名称组合起来,加上“.evtx”后缀,来组成备份路径名称。

这里的备份文件存储在“e:\logbak”目录下。执行“$LogFile.B ackupEventLog($bffile)”命令,进行日志的备份操作,得到所需的日志备份文件。执行“Clear-EventLog-LogName'Security'”命令,清除当前指定的日志信息。为了便于使用,可以将上述命令保存为“autobaklog.ps1”文件。打开任务计划窗口,在右侧点击“创建基本任务”项,在向导界面中输入该任务的名称(例如“定时备份系统日志”),点击下一步按钮,在“希望该任务何时开始”栏中选择“每天”项。

在下一步窗口中设置开始日期和触发时间,在“每隔”栏中输入具体的周期数,例如“30”表示每隔30天执行一次。点击下一步按钮,选择“启动程序”项。在下一步窗口(图1)中点击浏览按钮,选择“c:\windows\system32\WindowsPowershell\v1.0\powershell.exe”程序,在“添加参数”栏中输入“d:\autobaklog.ps1”,这里假设将该脚本文件保存在D盘中。之后点击完成按钮,创建该任务。

这样,当到达预设的时间后,就可以自动备份所需的日志了。同理,对于目标程序的日志备份也可以使用类似的方法来实现。首先需要了解目标程序的日志存储路径,这里假设为“d:\exchage\log”,日志文件后缀为“.log”。在PowerShell中执行“$LogFile=Get-Childltem-Path'd:\exchage\log'-Recurse-Filter"*.log"”命令,根据指定的日志路径,得到目标程序全部的日志文件信息,包括子目录中的日志文件。执行“$Date=Get-Date”命令,获取当前的时间信息。

执行“$BakLogPath='e:\logdata\exchange\'+$Date.Year.ToString()+ $Date.Month.ToString()+ $Date.Day.ToString()+"\"”命令,提取当前时间信息中的年月日的值组合成备份路径名称,这里备份路径为“e:\logdata\exchange”。所有的备份文件都保存在该路径下。执行“New-Item-Path$BakLogPath-ItemType Directory”命令,按照上述组合的名称,在指定备份路径下创建备份目录。执行“$LogFiles|Copy-Item-Destination $BakLogPath”命令,将所有的日志文件复制到该备份目录中。执行“$LogFile|Remove-Item”命令,清理当前的日志文件。可以按照上述方法,在计划任务窗口中为其创建对应的定时备份任务,例如每隔10天执行一次备份操作等。

查看本本网络配置信息

使用PowerShell可以进行网络初始化操作,获取网卡信息,配置IP/默认网关/DNS服务器地址等。因为在PowerShell中提供了不同的Module,在每个Module中提供了不同的命令和函数,可以执行各种配置操作。执行“Get-NetAdapter”命令,显示所有的网卡设备。执行“Get-NetIPAddress”命令,显示所有网卡的详细IP地址信息。这些命令实际上是由不同的Module来提供的,执行“Get-Command Get-NetAdapter”命令,在“Source”列中显示提供该函数具体的Module的名称。

例如想查看名为“NetAdapter”这个Module的函数,可以执行“Get-Command-Module NetAdapter”命令,显示该Module中提供的所有函数。执行“Get-Command-Module NetAdapter Imeasure”命令,显示具体的函数数量。执行“Get-Command-Module NetAdapter-Verb get”命令,可以查看在该Module中获取信息的函数。例如执行“Get-NetAdapterAdvancedProperty-name Management”命令,显示关于名为“Management”这款网卡的高级属性信息。执行“Get-Command-Module NetAdapter-Verb set”命令,可以查看该Module中相关的设置函数。

例如执行“Get-NetAdapter|where{$_.ifindex-eq 6)|Rename-NetAdapter-name"newAdapter"”命令,可以将选定的网卡更名为“netAdapter”,该命令中的“6”表示该网卡的索引编号,在查看网卡信息的命令中会显示该编号。注意,该命令需要以管理员身份运行PowerShell。执行“Get-NetAdapter|where{$_.ifindex-eq 6}|New-NetIPAddress-IPAddress 192.168.1.50-DefaultGateway'192.168.1.1-PrefixLength 24”命令,就可以针对目标网卡设置其IP和默认网关信息。执行“Set-DnsClientServerAddress-InterfaceIndex 6-ServerAddresses'192.168.1.50'”命令,可以设置目标网卡的DNS服务器地址,其中的“6”表示该网卡的索引编号。执行“Get-Module”命令,显示使用过的或者已经加载的Module。

为本本巧设磁盘报警器

对于现在的系统和软件来说,不仅体积比较庞大,而且产生的数据(例如日志等)也比较占用磁盘空间。如果磁盘空间不足,就可能出现各种奇怪的故障。对于本本的系统盘来说,此类情况尤为常见。如果本本可以在磁盘容量低于警戒值后,自动向您的手机发送短信,就可以及时提醒您对磁盘进行优化,扩充其容量,避免可能由此引发的故障。

实际上,现在移动服务运行商都为用户免费提供了邮件提醒功能,当然,服务器需要能够访问Internet方可。当邮箱收到邮件后,可以自动向用户的手机发送短信,这样就可以轻松实现磁盘容量短信报警功能。在PowerShell中执行“$Disklist=Get-Volume”命令,获取当前系统的磁盘信息。

执行“foreach($volletter in$Disklist){”命令,开启一个循环,将获取的每个磁盘信息赋予名为“Volletter”的变量。执行“if($Volletter.DriveType-eq"Fixed"-and$Volletter.FileSystemLabel-ne"系统保留”){”命令,将非硬盘分区以及系统保留分区全部清除,只保留可用的硬盘分区。

执行“[int]$kyrl=$Volume.SizeRemaining/1GB”命令,将当前硬盘分区的可用容量转换为GB单位。执行“if($kyrl-lt 5){”命令,如果当前硬盘分区可用容量小于5GB,那么就触发预设的动作。

执行“$Date=Get-Date”命令,获取当前的时间信息。执行“$fjr="user@163.com"”“$sjr="xxxxxx@mixazure.com"”“$zhuti=$Volume.DriveLetter+"磁盘容量告警””“$neirong="该硬盘分区可用空间小于指定值,请清理磁盘空间!"”“$SMTPfwq="smtp.xxx.com"”命令,设置发件人信息,这里假设为“user@163.com”,并設置收件人信息,“xxx”为收件人手机号码。设置邮件的主题为磁盘不足的报警信息,并显示具体的磁盘盘符,在邮件内容部分设置具体的提醒信息。

执行“$Password=ConvertTo-SecureString"p@asswOrd"-AsPlainText-Force”命令,设置当前账户的密码信息,这里密码为“p@asswOrd”。执行“$cred=New-Object System.Management.Automation.PSCredential("xxx\aduser",$Password)”命令,设置凭证信息,其中的域名为“xxx”,账户名为“aduser”。执行“Send-MailMessage-To $sjr-From $fjr-Subject$zhuti-Body $neirong-SmtpServer $SMTPfwq-Credential $cred-Encoding UTF8)))”命令,使用“Send-MailMessage”函数,并结合上述指定的收件人、发件人、主题、邮件内容等预设信息,以指定的账户身份发送邮件。

当执行以上命令后,就可以对所有的硬盘分区间磁盘进行扫描,如果某个分区的容量低于预设值,就发送邮件信息进行提醒,邮箱随即会以短信的形式发送到管理员的手机上。为了实现自动检测操作,可以按照上述方法,将上述命令行保存为独立的脚本文件,创建所需的计划任务项目,在每天的指定时间(例如凌晨0点等),执行该计划任务。打开该任务的属性窗口,在“触发器”面板中选择当前的触发器项目,点击“编辑”按钮,在打开窗口(图2)中选择“重复任务间隔”项,设置重复执行的周期(例如30分钟),这样每个指定的时间,就会自动执行本计划任务,检测所有硬盘分区的可用容量,如果低于指定值,就会向管理员发送报警短信。

深入查看本本信息

使用PowerShell提供的WMI(即WindowsManagement Instrumentation)机制,无须借助任何工具,就可以让本本用户轻松获取系统中的各种信息。其中的某些信息,是无法利用常规的GUI方式来获取的。例如在PowerShell窗口中执行“wmimgmt.msc”命令,在打开窗口中左侧的“WMI控件(本地)”节点的右键菜单上点击“属性”项,就会和本地的WMI服务建立连接,在属性窗口(图3)中的“常规”面板中显示WMI的版本和类库位置信息,其默认位置为“C:\Windows\System32\wbem”。

在“安全”面板中打开“Root”节点,会显示WMI的命名空间信息,在不同的命令空间节点中包含着对应的WMI类。当使用PowerShell来访问WMI的类库,获取相关的系统信息时,必须指定对应的入口,这就和上述不同的命令空间相对应的。例如执行“Get-WmiObject-Namespace root\cimv2-ClassNameWin32_OperatingSystem”命令,显示常规的操作系统信息。其中的“root\cimv2”就是一个命令空间项目。

执行“Get-WmiObject-List-Namespaceroot\cimv2|measure”命令,会显示这些类的数量。因为涉及的类的数量很多,利用PowerShell的筛选功能,可以只显示指定的类。执行“Get-Wmiobject-List-Namespace root\cimv2|where{$_.name-like"*memory*")”命令,会在其中过滤与内存相关的类的信息。执行“Get-Wmiobject Win32_PhysicalMemory”命令,会显示详细的内存配置信息。注意,其效果与执行“Get-WmiObject-Namespaceroot\cimv2-ClassName Win32_PhysicalMemory”命令是等效的。

打开上述属性窗口的“高级”面板(图4),在“脚本程序的默认命令空间”栏中显示“root\cimv2”,所以即使不指定命令空间名称,PowerShell也会使用默认的名称。执行“Get-Wmiobject Win32_Processor”命令,会显示CPU的基本信息。执行“Get-Wmiobject Win32_Processor|fl*”命令,会显示该CPU的详细信息。执行“Get-WmiObject-Class Win32_Logicaldisk”命令,显示基本磁盘信息。也可以执行“Get-WmiObject-ClassWin32_Logicaldisk|where{$_.DriveType-eq 3)”等命令,来筛选指定类型的磁盘信息。

执行“Get-WmiObject-Query"select*from Win32_LogicalDisk Where DriveType=3"|fl*”命令,来显示硬盘信息。如果将其中的“DriveType”的值修改为0/2/4/5/6,可以显示未知/移动存储/共享盘/光盘/内存盘等磁盘信息。也可以执行“Get-WmiObject-Query"select*from Win32_LogicalDiskWhere DriveType=3"|Select-Object@{n="盘符";e={$_.name),@{n="自由空间";e={$_.freespace}/1GB-as[int]}”命令,来自定义显示的磁盘信息。

如果想查看目标主机的常用信息,例如名称、运行时间等,可以执行“Get-WmiObject-Class Win32_OperatingSystem-ComputerNameserverl.xxx.com|Select-Object@{n='计算机名称';e={$_.PSComputername}},@{n="安装时间";e={$_.ConvertToDateTime($_.InstalIDate)}},@{n="启动时间";e={$_.ConvertToDateTime($_.LastBootUpTime)}},@{n="系統版本";e={$_.Caption}}”命令,来获取相关的信息。

猜你喜欢

本本磁盘网卡
联网全靠它 认识笔记本的无线网卡
它的好 它的坏 详解动态磁盘
解决Windows磁盘签名冲突
Windows系统下动态磁盘卷的分析与研究
挑战Killer网卡Realtek网游专用Dragon网卡
克隆硬盘很简单
论持久战
李本本的故事
李本本的故事
USB故障又一原因