Windows Server Core 管理与 PowerShell 笔记(八)———— 计算机管理(进程、服务、日志)

2019-04-07 553 Words Windows Powershell

Windows Server Core 管理与 PowerShell 笔记(八)———— 计算机管理(进程、服务、日志)

在 Windows Server Core 中,可以按住 Ctrl+Alt+Delete 来打开任务管理器,因此可以图形化的管理进程和服务。在 PowerShell 下也有非常良好的接口用于配置进程运行、服务运行和日志等。本文所介绍的绝大部分命令都是来自 Microsoft.PowerShell.Management 模块之中。在这个模块中,还有其他诸如查看计算机信息、设置市区、关机、重启、加入域、退出域等功能。

一、计算机信息查询(Get-ComputerInfo)

我们通常需要有一个命令来查询计算机的软硬件信息,包括内存、CPU、OS 等相关信息。PowerShell 提供了一个 Get-ComputerInfo 命令来查询这些基本信息。但是这个命令输出的条目过多,往往不能够很好的找到我们所需要的信息。因此需要在这个命令的基础上加以筛选来现实我们所需要的系统信息:

Get-ComputerInfo *process* # 获取处理器信息
Get-ComputerInfo *memory* # 获取内存用量信息
Get-ComputerInfo *OS* # 获取操作系统信息
Get-ComputerInfo *Bios* # BIOS 信息
Get-ComputerInfo *Timezone* # 时区
Get-COmputerInfo *Domain* # 加入的域名

PowerShell 支持完整的正则表达式支持,因此可以灵活地设置匹配字符串。

二、进程管理

Windows Server Core 中保留了任务管理器,在使用远程登录的情况下,是无需使用这些命令来进行进程管理的。但是有时候,我们使用 ssh 或远程连接 PowerShell 时,我们只有一个 Powershell 终端。此时,就需要我们使用命令行来进行管理。

Get-Process 可以用来获取当前的所有进程对象。在此基础上,我们可以加以搜索或者筛选,以此来查看我们所需要的进程对象:

PS C:\Windows\system32> Get-Process explorer

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
   1531      58    31076      99056       3.45   4948   1 explorer

我们可以看到进程所使用的PID、句柄、CPU、内存使用、进程名称等基本信息。 Id 是进程 Id,Handles 是句柄数。NPM 是不可分页内存。PM 是可分页内存。WS 是工作集,即最近被进程所使用的内存分页。CPU 是占用 CPU 时间。ProcessName 是进程名称。此外,我们在输入命令时候,使用 -IncludeUserName 则可以显示进程所属用户名(需要管理员权限)。

下一个例子给出了查询 CPU 大于 10s 的进程集合的使用例子:

PS C:\Windows\system32> Get-Process  | where {$_.CPU -gt 10}| ft

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    471      60   117000      94048      19.02   1872   0 MsMpEng
   1934       0      192        116     131.33      4   0 System

Start-Process 用于启动一个新的进程。主要可选参数有:

  • -FilePath 指定可执行文件位置
  • -WorkingDirectory 指定工作目录
  • -RedirectStandardInput 重定向标准输入
  • -RedirectStandardOutput 重定向标准输出
  • -RedirectStandardError 重定向标准错误
  • -UseNewEnvironment 使用自己的环境变量,而不是从父进程继承。
  • -WindowStyle 窗口情况,例如 Maximized
  • -Verb 打开方式,比如 Powershell 有 open(新建窗口)、runas(以管理员身份打开)

例如:

PS C:\Windows\system32>  Start-Process powershell.exe -Verb runas # 使用管理员身份打开新的 PowerShell 终端。

在选取合适的进程对象之后,可以用管道送入 Stop-Process 来关闭进程,也可以送入 Wait-Process 来锁定当前进程,直到对象进程全部结束。还可以使用 Debug-Process 来对进程附加一个 debugger。例如:

PS C:\Windows\system32>  Stop-Process -Name explorer # 关闭文件管理器。
PS C:\Windows\system32>  Wait-Process -id 1000 # 等待 pid 为 1000 的进程结束
PS C:\Windows\system32>  Get-Process explorer | Stop-Process # 关闭 Get-Process 获取的全部进程

三、服务管理

3.1 查询和修改服务

命令 Get-ServiceSet-Service 可以用来查询和修改服务对象。进程对象的常见属性有:

  • Name名称
  • RequiredServices 要求的服务
  • DisplayName 显示的名称
  • DependentServices 依赖的服务
  • MachineName 计算机
  • ServiceName 服务名
  • ServicesDependedOn 依赖于
  • Status 状态
  • StartType 启动类型

例如:

PS C:\Windows\system32> Get-Service "*ssh*" # 获取名字带有 ssh 的服务

Status   Name               DisplayName
------   ----               -----------
Stopped  ssh-agent          OpenSSH Authentication Agent

# 将这个服务的启动类型修改为系统启动时启动。
PS C:\Windows\system32> Get-Service "*ssh*" | Set-Service -StartupType Boot

3.2 新建和删除服务

New-Service 用于新建服务。

  • -Name 指定名称
  • -BinaryPathName 指定运行程序
  • -DependsOn 指定依赖
  • -DisplayName 指定显示名称
  • -StartupType 启动类型 Boot, System, Automatic, Manual, Disabled
  • -Description 描述

例如:

New-Service -Name "TestService" -BinaryPathName "C:\WINDOWS\System32\svchost.exe -k netsvcs"

目前没有删除服务的命令,只能使用 sc.exe 命令行工具来删除。使用格式是:

sc.exe delete <服务名>

3.3 修改服务状态

Start-Service 用于启动服务,Stop-Service 用于关闭服务,Restart-Service 用于重启服务。 Suspend-Service 用于暂停服务,Resume-Service 用于继续服务。

这些命令都是用于改变某一个或者某一些服务的状态。我们可以使用 -Name 参数指定名称,或使用 -DisplayName 来指定展示名称,或直接利用管道符“|”来传递服务对象。

四、日志管理

Windows 提供了统一的日志模块。各个应用在统一的日志管理中注册。命令 Get-EventLog -List 来列出当前有哪些日志:

PS C:\Windows\system32> get-eventlog -List

  Max(K) Retain OverflowAction        Entries Log
  ------ ------ --------------        ------- ---
  20,480      0 OverwriteAsNeeded         474 Application
  20,480      0 OverwriteAsNeeded           0 HardwareEvents
     512      7 OverwriteOlder              0 Internet Explorer
  20,480      0 OverwriteAsNeeded           0 Key Management Service
     512      7 OverwriteOlder                Parameters
  20,480      0 OverwriteAsNeeded       2,114 Security
     512      7 OverwriteOlder                State
  20,480      0 OverwriteAsNeeded       2,513 System
  15,360      0 OverwriteAsNeeded         204 Windows PowerShell

4.1 新建日志和移除日志

命令 New-EventLog 用于新建一个日志。使用参数 -LogName 指定日志名称;-Source 指定源程序;MessageResourceFile 指定消息源的程序。

命令 Remove-EventLog 用来删除一个日志。可以使用 -LogName 来指定名称或者使用 -Source 来制定程序。

4.2 移除日志条目和限制日志大小。

命令 Clear-EventLog 用来清除日志中的所有条目。需要使用 -Logname 指定清除的日志名称。

PS C:\Windows\system32> Clear-EventLog 'Windows PowerShell'

命令 Limit-EventLog 用来限制一个日志的大小。 -LogName 来指定日志名称,而 -MaximumSize 指定了日志最大的容量。

4.3 获取日志条目和写日志条目

命令 Get-EventLog 用来获取某一个日志中具体的条目。具有以下参数:

  • -LogName 日志名
  • -Newest 数字,最近的几个条目
  • -EntryType 条目的类型,比如 Error
  • -InstanceID 实例 ID
  • -Source 数据源
  • -Message 正则表达式匹配日志条目
  • -UserName 用户名
  • -After 该日期之后
  • -before 该日期之前

例如:

PS C:\>$May31 = Get-Date 5/31/08
PS C:\>$July1 = Get-Date 7/01/08
PS C:\>Get-EventLog -Log "Windows PowerShell" -EntryType Error -After $May31 -before $July1

PS C:\> Get-EventLog -LogName System -EntryType Error

命令 Show-EventLog, 打开 GUI 的事件查看器。

命令 Write-EventLog 用来写一个新的日志条目。有一下参数可以设置:

  • -LogName 日志名
  • -Source 数据源
  • -EventId 事件 ID
  • -EntryType 有 Error, Information, FailureAudit, SuccessAudit, Warning 几个等级。
  • -Message 消息内容
  • -Category Int16 类型分类ID

例如:

Write-EventLog -LogName "Application" -Source "MyApp" -EventID 3001 -EntryType Information -Message "MyApp added a user-requested feature to the display." -Category 1 -RawData 10,20

Write-EventLog -LogName Application -Source "MyApp" -EventID 3001 -Message "MyApp added a user-requested feature to the display."

五、清空回收站

Clear-RecycleBin 用于清空回收站。

六、总结

本文总结了在系统管理中的常用的命令,包括查询计算机状态、管理进程、管理后台服务、管理事件日志。