前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PS命令之操作系统远程管理及进程服务操作示例

PS命令之操作系统远程管理及进程服务操作示例

作者头像
全栈工程师修炼指南
发布2022-09-29 15:22:01
7.3K0
发布2022-09-29 15:22:01
举报
文章被收录于专栏:全栈工程师修炼之路

[TOC]

命令 -

基础语法:

简单示例:

[TOC]

0x00 系统远程访问管理

Enable-PSRemoting 命令 - 将计算机配置为接收远程命令。

描述: 该cmdlet将计算机配置为接收通过使用WS-Management技术发送的PowerShell远程命令。当前仅在Windows平台上支持基于WS-Management的PowerShell远程处理(此cmdlet在Linux或MacOS版本的PowerShell中不可用)。

Tips : Windows Server 平台上默认启用PowerShell远程处理, 通常不允许在计算机位于公用网络上时在Windows客户端版本上启用PowerShell远程处理,但是您可以使用SkipNetworkProfileCheck 参数跳过此限制

代码语言:javascript
复制
# 查看服务状态
Get-Service -Name WinRM
  # Status   Name               DisplayName
  # ------   ----               -----------
  # Running  WinRM              Windows Remote Management (WS-Manag...

该cmdlet会执行以下操作:

  • 运行Set-WSManQuickConfig cmdlet,该cmdlet执行以下任务:
    • 启动WinRM服务。
    • 将WinRM服务上的启动类型设置为“自动”。
    • 创建一个侦听器以接受任何IP地址上的请求。
    • 为WS-Management通信启用防火墙例外。
    • 如果需要,创建简单和长名称会话端点配置。
    • 启用所有会话配置。
    • 更改所有会话配置的安全描述符,以允许远程访问。
  • 重新启动WinRM服务以使前面的更改生效。

语法参数:

代码语言:javascript
复制
Enable-PSRemoting [-Force] [-SkipNetworkProfileCheck] [-WhatIf] [-Confirm] [<CommonParameters>]

基础示例:

代码语言:javascript
复制
# 0.配置计算机以接收远程命令(需要远程确认)
Enable-PSRemoting

# 1. 在服务器上以管理员权限运行启用PowerShell远程访问(配置计算机以在没有确认提示的情况下接收远程命令)
Enable-PSRemoting -Force
Enable-PSRemoting -SkipNetworkProfileCheck -Force  # 在计算机位于公用网络上时在Windows客户端版本上启用PowerShell远程处理
  # 在此计算机上设置了 WinRM 以接收请求。
  # WinRM 已经进行了更新,以用于远程管理。
  # WinRM 防火墙异常已启用。
  # 已配置 LocalAccountTokenFilterPolicy 以远程向本地用户授予管理权限。
  # 警告: 正在等待服务“Windows Remote Management (WS-Management) (winrm)”停止.

# 2.如何在Windows操作系统的客户端版本上允许从公共网络进行远程访问,对于不同版本的Windows,防火墙规则的名称可能不同;
# NetSecurity模块中的Set-NetFirewallRulecmdlet添加了防火墙规则,该规则允许从任何远程位置从公共网络进行远程访问
Get-NetFirewallRule -Name 'WINRM*' | Select-Object Name 
  # Name
  # ----
  # WINRM-HTTP-In-TCP-NoScope
  # WINRM-HTTP-In-TCP
  # WINRM-HTTP-Compat-In-TCP-NoScope
  # WINRM-HTTP-Compat-In-TCP
# 建议指定远程连接的主机
Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-NoScope" -RemoteAddress 10.20.172.103
# 如果安全组有限制, 请开放对此机器入方向的5985(HTTP)和5986(HTTPS)端口。
New-NetFirewallRule -Name powershell-remote-tcp -Direction Inbound -DisplayName 'PowerShell远程连接 TCP' -LocalPort 5985-5996 -Protocol 'TCP' -RemoteAddress 192.168.1.254
New-NetFirewallRule -Name powershell-remote-udp -Direction Inbound -DisplayName 'PowerShell远程连接 UDP' -LocalPort 5985-5996 -Protocol 'UDP' -RemoteAddress 192.168.1.254

# 3.在客户端机器上(需要远程连接被管理的机器上)运行以下命令以接受被管理的机器是受信任的 (如果想管理任何机器请设置为*), 运行以下命令必须是管理员权限
PS > Get-Service -Name WinRM | Start-Service
PS > Set-Item WSMan:localhost\client\trustedhosts -value 10.20.172.106 -Force
PS > Enter-PSSession -ComputerName 10.20.172.106 -Credential weiyigeek
  # [10.20.172.106]: PS C:\Users\WeiyiGeek\Documents> hostname
  # Security
  # [10.20.172.106]: PS C:\Users\WeiyiGeek\Documents> Get-NetAdapter

  # Name                      InterfaceDescription                    ifIndex Status       MacAddress             LinkSpeed
  # ----                      --------------------                    ------- ------       ----------             ---------
  # VMware Network Adapte...1 VMware Virtual Ethernet Adapter for ...      16 Up           00-50-56-C0-00-01       100 Mbps
  # 以太网                       Intel(R) Ethernet Connection (11) I2...      12 Up           B0-7B-25-05-9E-DE         1 Gbps
  # VMware Network Adapte...8 VMware Virtual Ethernet Adapter for ...       4 Up           00-50-56-C0-00-08       100 Mbps

问题1.如在被控制机器上执行时出现如下Set-WSManQuickConfig错误时请将网络连接类型更改为域或专用然后再次尝试.

代码语言:javascript
复制
Set-WSManQuickConfig : <f:WSManFault xmlns:f="http://schemas.microsoft.com/wbem/wsman/1/wsmanfault" Code="2150859113" Machine="localhost"><f:Message><f:ProviderFault provider="Config provider" path="%systemroot%\system32\WsmSvc.dll"><f:WSManFault xmlns:f="http://schemas.microsoft.com/wbem/wsman/1/wsmanfault" Code="2150859113" Machine="Security"><f:Message>由于此计算机上的网络连接类型之一设置为公用,因此 WinRM 防火墙例外将不运行。  </f:Message></f:WSManFault></f:ProviderFault></f:Message></f:WSManFault>

WeiyiGeek.专用网络配置

问题2.如在客户端机器上执行set-Item命令出现如下Set-Item : 客户端无法连接到请求中指定的目标错误时,请开启客户端的启动 WinRM 服务。

代码语言:javascript
复制
Set-Item WSMan:localhost\client\trustedhosts -value 10.20.172.106 -Force
Set-Item : 客户端无法连接到请求中指定的目标。 请验证该目标上的服务是否正在运行以及是否正在接受请求。 有关目标(通常是 IIS 或 WinRM)上运行的 WS 管理服务,请查阅日志和文档。 如果目标是 WinRM 服务,则在目标上运行以下命令来分析和配置 WinRM 服务: "winrm quickconfig"。

解决办法: Get-Service -Name WinRM | Start-Service

Disable-PSRemoting 命令 - 禁用Windows PowerShell远程会话配置

描述: 该cmdlet阻止对本地计算机上所有PowerShell版本和更高会话会话配置的远程访问,同样需要使用“以管理员身份运行” 选项启动。

语法参数:

代码语言:javascript
复制
Disable-PSRemoting [-Force] [-WhatIf] [-Confirm] [<CommonParameters>]

基础示例:

代码语言:javascript
复制
# 示例1:阻止对所有PowerShell会话配置的远程访问
Disable-PSRemoting

# 示例2:在没有确认提示的情况下阻止对所有PowerShell会话配置的远程访问
Disable-PSRemoting -Force
# 禁用会话配置后,该New-PSSessioncmdlet尝试创建到本地计算机的远程会话(也称为“环回”)。
# 由于在本地计算机上禁用了远程访问,因此该命令将失败
New-PSSession -ComputerName localhost -ConfigurationName PowerShell.6

# 示例4:运行此cmdlet和Enable-PSRemoting的效果
Disable-PSRemoting -force
Get-PSSessionConfiguration | Format-Table -Property Name, Permission -Auto
  # Name               Permission
  # ----               ----------
  # PowerShell.6       NT AUTHORITY\NETWORK AccessDenied, NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed ...
  # PowerShell.6.2.0   NT AUTHORITY\NETWORK AccessDenied, NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed ...

# 新的输出显示AccessDenied安全描述符已从所有会话配置中删除,此时便可以正常的创建远程连接会话了。
Enable-PSRemoting -Force
Get-PSSessionConfiguration | Format-Table -Property Name, Permission -Auto
  # Name               Permission
  # ----               ----------
  # PowerShell.6       NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed ...
  # PowerShell.6.2.0   NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed ...

# 示例5:具有禁用的会话端点配置的环回连接
Disable-PSRemoting -Force
# 第一次会话创建尝试: 凭据通过Credential参数显式传递给命令, 这种类型的连接通过网络堆栈,而不是环回。因此与禁用端点的连接尝试失败,并显示“拒绝访问”错误。
New-PSSession -ComputerName localhost -ConfigurationName powershell.6 -Credential (Get-Credential)
# 第二次会话创建尝试: 它是成功的因为它是绕过网络堆栈的环回连接。
New-PSSession -ComputerName localhost -ConfigurationName powershell.6 -EnableNetworkAccess
  # Id Name       Transport ComputerName  ComputerType   State   ConfigurationName   Availability
  # -- ----       --------- ------------  ------------   -----   -----------------   ------------
  # 1  Runspace1  WSMan     localhost     RemoteMachine  Opened  powershell.6           Available

# 示例6:阻止对具有自定义安全描述符的会话配置的远程访问
# Register-PSSessionConfiguration创建测试会话配置, 该文件路径参数指定自定义会话的会话配置文件, 该 ShowSecurityDescriptorUI参数显示一个对话框为会话配置的权限集
Register-PSSessionConfiguration -Name Test -FilePath .\TestEndpoint.pssc -ShowSecurityDescriptorUI -Force
Get-PSSessionConfiguration | Format-Table -Property Name, Permission -Wrap
# 现在Get-PSSessionConfigurationand和Format-Tablecmdlet显示将 所有网络用户的AccessDenied安全描述符添加到所有会话配置中,包括 测试会话配置。尽管其他安全描述符未更改,但“ network_deny_all”安全描述符优先
  # Name               Permission
  # ----               ----------
  # PowerShell.6       NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed,
  #                   BUILTIN\Remote Management Users AccessAllowed
  # PowerShell.6.2.0   NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed,
  #                   BUILTIN\Remote Management Users AccessAllowed
  # Test               NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed,
  #                   User01 AccessAllowed

# 示例7:重新启用对选定会话配置的远程访问
# 例如:下面更改PowerShell.6会话配置利用AccessMode参数重新启用对配置的远程访问。
Disable-PSRemoting -Force
Get-PSSessionConfiguration | Format-Table -Property Name, Permission -Auto
  # Name                 Permission
  # ----                 ----------
  # PowerShell.6         NT AUTHORITY\NETWORK AccessDenied(关键点), NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Adm ...
  # PowerShell.6.2.0     NT AUTHORITY\NETWORK AccessDenied, NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Adm ...

Set-PSSessionConfiguration -Name PowerShell.6 -AccessMode Remote -Force
Get-PSSessionConfiguration | Format-Table -Property Name, Permission -Auto
  # Name                 Permission
  # ----                 ----------
  # PowerShell.6         NT AUTHORITY\INTERACTIVE AccessAllowed(关键点), BUILTIN\Administrators AccessAllowed, BUILTIN\ ...
  # PowerShell.6.2.0     NT AUTHORITY\NETWORK AccessDenied, NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Adm ..

Tips : 当满足以下条件时将创建回送连接,1.要连接的计算机名称是“ localhost”,2.没有凭据传入。当前登录用户(隐式凭据)用于连接,3.使用EnableNetworkAccess开关参数。


0x01 计算机管理配置

Rename-Computer 命令 - 更改计算机名称

描述: 此Cmdlet是在 Windows PowerShell 3.0 时加入。

语法说明:

代码语言:javascript
复制
Rename-Computer [-NewName] <System.String> [-ComputerName <System.String>] [-DomainCredential <System.Management.Automation.PSCredential>] [-Force] [-LocalCredential <System.Management.Automation.PSCredential>] [-PassThru] [-Protocol {DCOM | WSMan}] [-Restart] [-WsmanAuthentication {Default | Basic | Negotiate | CredSSP | Digest | Kerberos}] [-Confirm] [-WhatIf] [<CommonParameters>]

简单示例

代码语言:javascript
复制
# - 1) 本地计算机重命名并重启计算机
Rename-Computer -NewName "weiyigeek" -Restart
Rename-Computer -NewName "DomainServer" -DomainCredential Domain01\Admin01 -Restart

# - 2) 远程计算机重命名
Rename-Computer -ComputerName "Srv01" -NewName "Server001" -DomainCredential Domain01\Admin01 -Force

Restart-Computer 命令 - 在本地和远程计算机上重新启动操作系统。

描述: 从Windows PowerShell 3.0开始,您可以等待重新启动完成,然后再运行下一个命令。指定等待超时和查询间隔,并等待重新启动的计算机上的特定服务可用。

基础语法:

代码语言:javascript
复制
Restart-Computer [[-ComputerName] <System.String[]>] [[-Credential] <System.Management.Automation.PSCredential>] [-AsJob] [-DcomAuthentication {Default | None | Connect | Call | Packet | PacketIntegrity | PacketPrivacy | Unchanged}] [-Force] [-Impersonation {Default
| Anonymous | Identify | Impersonate | Delegate}] [-ThrottleLimit <System.Int32>] [-Confirm] [-WhatIf] [<CommonParameters>]

Restart-Computer [[-ComputerName] <System.String[]>] [[-Credential] <System.Management.Automation.PSCredential>] [-DcomAuthentication {Default | None | Connect | Call | Packet | PacketIntegrity | PacketPrivacy | Unchanged}] [-Delay <System.Int16>] [-For {Wmi | WinRM | PowerShell}] [-Force] [-Impersonation {Default | Anonymous | Identify | Impersonate | Delegate}] [-Protocol {DCOM | WSMan}] [-Timeout <System.Int32>] [-Wait] [-WsmanAuthentication {Basic | CredSSP | Default | Digest | Kerberos | Negotiate}] [-Confirm] [-WhatIf] [<CommonParameters>]

# 参数说明:
ComputerName 参数 : 指定要操作的Server01和Server02服务器名称或者IP
Force 参数 : 使每台计算机立即重新启动。
ThrottleLimit 参数 : 将命令限制为10个并发连接。
Impersonation 参数: 指定匿名以隐藏请求者的身份。
DcomAuthentication 参数 : 将PacketIntegrity指定为连接的身份验证级别。
AsJob 参数 : 将命令作为后台作业运行。
Wait 参数 : 等待重启完成。
For 参数 : 指定PowerShell可以在远程计算机上运行命令。
Timeout 参数 : 指定五分钟的等待时间。
Delay 参数 : 每两秒钟查询一次远程计算机,以确定它是否重新启动。
Protocol 参数 : 指定使用WSMan协议。
WsmanAuthentication 参数 : 将身份验证方法指定为Kerberos

简单示例:

代码语言:javascript
复制
# - 1.Restart the local computer (简单且最常用)
Restart-Computer
Restart-Computer -ComputerName localhost, Server01

# - 2.Restart a remote compute
# `Restart Computer`使用ComputerName参数指定Server01。
Restart-Computer -ComputerName Server01 -Impersonation Anonymous -DcomAuthentication PacketIntegrity

# - 3.作为后台作业重新启动计算机,作业对象存储在`$job`变量中`$Job`通过管道发送到获取结果的'Receive Job'cmdlet。
$Job = Restart-Computer -ComputerName "Server01", "Server02" -AsJob
$Job | Receive-Job

# - 4.重新启动远程计算机并等待PowerShell
Restart-Computer -ComputerName Server01 -Wait -For PowerShell -Timeout 300 -Delay 2

# - 5.`Get Content`使用Path参数从文本文件Domain01.txt中获取计算机名列表。计算机名存储在变量“$names”中`Get Credential`提示您输入用户名和密码,并将值存储在变量“$Creds”中`Restart Computer`使用ComputerNameCredential参数及其变量。
$Names = Get-Content -Path C:\Domain01.txt
$Creds = Get-Credential
Restart-Computer -ComputerName $Names -Credential $Creds -Force -ThrottleLimit 10

# - 6.使用WSMan协议重新启动计算机
Restart-Computer -ComputerName Server01 -Protocol WSMan -WsmanAuthentication Kerberos

Stop-Computer 命令 - 停止(关闭)本地和远程计算机

描述: 使用"Stop Computer"的参数将关闭操作作为后台作业运行,指定身份验证级别和备用凭据,限制为运行命令而创建的并发连接,并强制立即关闭

基础语法:

代码语言:javascript
复制
Stop-Computer [[-ComputerName] <System.String[]>] [[-Credential] <System.Management.Automation.PSCredential>] [-AsJob] [-Confirm] [-DcomAuthentication {Default | None | Connect | Call | Packet | PacketIntegrity | PacketPrivacy | Unchanged}] [-Force] [-Impersonation {Default | Anonymous | Identify | Impersonate | Delegate}] [-Protocol {DCOM | WSMan}] [-ThrottleLimit <System.Int32>] [-WsmanAuthentication {Default | Basic | Negotiate | CredSSP | Digest | Kerberos}] [-WhatIf] [<CommonParameters>]

简单示例:

代码语言:javascript
复制
# Example 1: Shut down the local computer  or two remote computers 
Stop-Computer -ComputerName localhost
Stop-Computer -ComputerName "Server01", "Server02", "localhost"

# Example 2: Shut down remote computers as a background job
$j = Stop-Computer -ComputerName "Server01", "Server02" -AsJob
$results = $j | Receive-Job
$results

# Example 3: Shut down a remote computer
Stop-Computer -ComputerName "Server01" -Impersonation Anonymous -DcomAuthentication PacketIntegrity

# Example 4: Shut down computers in a domain
$s = Get-Content -Path ./Domain01.txt
$c = Get-Credential -Credential Domain01\Admin01
Stop-Computer -ComputerName $s -Force -ThrottleLimit 10 -Credential $c

0x02 进程查看和管理

Get-Process 命令 - 获取在本地计算机或远程计算机上运行的进程

Start-Process 命令 - 启动在本地计算机或远程计算机未运行进程

Stop-Process 命令 - 停止在本地计算机或远程计算机上运行的进程

Wait-Process 命令 - 使在本地计算机或远程计算机上运行的进程等待

Debug-Process 命令 - 调试本地计算机上运行的一个或多个进程。

描述: Debug Process cmdlet将调试器附加到本地计算机上一个或多个正在运行的进程。可以通过进程名称或进程ID(PID)指定进程,也可以将进程对象通过管道传送到此cmdlet。

描述: 进程与服务常用cmdlet命令:

代码语言:javascript
复制
#1.获取进程相关的cmdlet命令
PS > (Get-Command *-Process).Name  #值得学习
Get-Process
Start-Process
Stop-Process
Wait-Process
Debug-Process

基础语法

代码语言:javascript
复制
# - Get-Process
Get-Process [[-Name] <System.String[]>] [-ComputerName <System.String[]>] [-FileVersionInfo] [-Module] [<CommonParameters>] -Id <System.Int32[]> -IncludeUserName [<CommonParameters>] -InputObject <System.Diagnostics.Process[]> [<CommonParameters>]

# - Start-Process
Start-Process [-FilePath] <System.String> [[-ArgumentList] <System.String[]>] [-Credential <System.Management.Automation.PSCredential>] [-LoadUserProfile] [-NoNewWindow] [-PassThru] [-RedirectStandardError <System.String>] [-RedirectStandardInput <System.String>] [-RedirectStandardOutput <System.String>] [-UseNewEnvironment] [-Wait] [-WindowStyle {Normal | Hidden | Minimized | Maximized}] [-WorkingDirectory <System.String>] [<CommonParameters>]

# - Wait-Process 
Wait-Process [-Id] <System.Int32[]> [-Name] <System.String[]>  [[-Timeout] <System.Int32>] [<CommonParameters>] -InputObject <System.Diagnostics.Process[]>

# - Stop-Process
Stop-Process [-Id] <System.Int32[]> -Name <System.String[]> [-InputObject] <System.Diagnostics.Process[] [-Force] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]

# - Debug-Process
Debug-Process [-Id] <System.Int32[]> [-Name] <System.String[]> -InputObject <System.Diagnostics.Process[]> [-Confirm] [-WhatIf] [<CommonParameters>]

基础示例:

1) Get-Process 基础使用

代码语言:javascript
复制
# 1.获取进程 (gps / ps)相关信息
Get-Process -Id 5600
get-Process -Name notepad  #获取指定运行经常的消息
  # Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName                   
  # -------  ------    -----      ----- -----   ------     -- -----------                   
  #     467      37    20916      50980   248     2.01   5600 notepad   
Get-Process notepad, explorer | Format-List * # 获取有关一个或多个进程的所有可用数据
Get-Process | Where-Object {$_.WorkingSet -gt 20000000} # 获取工作集大于指定大小的所有进程
Get-Process | Where-Object {$_.Name -eq "notepad" -or $_.Name -eq "iexplore"}  # 根据进程名过滤所有记事本进程以及IE进程。
Get-Process | Where-Object {$_.company -like '*Microsoft*' } | select Name,Description,Company # 根据company过滤所有产品发布者以”Microsoft”打头的进程
Get-Process | select -First 1 | Format-List *  # 通过每个Process对象的属性进行过滤并获取第一个对象的属性
  # Name                       : ApplicationFrameHost
  # Id                         : 4756
  # PriorityClass              : Normal
  # FileVersion                : 10.0.19041.746 (WinBuild.160101.0800)
  # HandleCount                : 510
  # WorkingSet                 : 42315776
  # PagedMemorySize            : 17203200
  # PrivateMemorySize          : 17203200
  # VirtualMemorySize          : 385449984
  # TotalProcessorTime         : 00:14:45.3750000
  # SI                         : 1
  # Handles                    : 510
  # VM                         : 2203703672832
  # WS                         : 42315776
  # PM                         : 17203200
  # NPM                        : 33360
  # Path                       : C:\WINDOWS\system32\ApplicationFrameHost.exe
Get-Process | Format-Table -View priority # 按优先级分组列出计算机上的进程
  # PriorityClass:Idle
  # ProcessName                  Id   HandleCount WorkingSet64
  # -----------                  --   ----------- ------------
  # firefox                   20764           847    177819648
  # firefox                   21368          1343    157007872
# - 向标准Get进程输出显示添加属性(值得学习)
Get-Process notepad | Format-Table `
    @{Label = "NPM(K)"; Expression = {[int]($_.NPM / 1024)}},
    @{Label = "PM(K)"; Expression = {[int]($_.PM / 1024)}},
    @{Label = "WS(K)"; Expression = {[int]($_.WS / 1024)}},
    @{Label = "VM(M)"; Expression = {[int]($_.VM / 1MB)}},
    @{Label = "CPU(s)"; Expression = {if ($_.CPU) {$_.CPU.ToString("N")}}},
    Id, MachineName, ProcessName -AutoSize
  # NPM(K) PM(K) WS(K)   VM(M) CPU(s)   Id MachineName ProcessName
  # ------ ----- -----   ----- ------   -- ----------- -----------
  #     15  3312 16792 2101400 0.14   4060 .           notepad
Get-Process SQL* -Module  # 获取用指定进程加载的模块
Get-Process notepad -IncludeUserName # 查找进程的所有者(需要管理员权限)
  # Handles      WS(K)   CPU(s)     Id UserName               ProcessName
  # -------      -----   ------     -- --------               -----------
  #     240      16732     0.14   4060 WEIYIGEEK\WeiyiGeek    notepad
Get-Process notepad  -FileVersionInfo # 获取进程的版本信息
  # ProductVersion   FileVersion      FileName
  # --------------   -----------      --------
  # 10.0.19041.980   10.0.19041.98... C:\WINDOWS\system32\notepad.exe
Get-Process pwsh   
Get-Process -Id $PID  # 使用自动变量标识承载当前会话的进程

2) Start-Process 基础使用

代码语言:javascript
复制
# 1.此示例启动一个进程,该进程使用当前文件夹中的Sort.exe文件。该命令使用所有默认值包括默认窗口样式、工作文件夹和凭据。
Start-Process -FilePath "sort.exe"

# 2.此示例启动一个进程,该进程打印C:\PS Test\MyFile.txt文件。
Start-Process -FilePath "myfile.txt" -WorkingDirectory "C:\PS-Test" -Verb Print

# 3.示例启动了一个进程,对Testsort.txt文件中的项进行排序,并返回sorted.txt文件中的排序项,任何错误都会写入sorterrror.txt文件。
Start-Process -FilePath "Sort.exe" -RedirectStandardInput "Testsort.txt" -RedirectStandardOutput "Sorted.txt" -RedirectStandardError "SortError.txt" -UseNewEnvironment

# 4.启用notepad打开1.txt并使最大化窗口(# hidden)
Start-Process C:\Windows\System32\notepad.exe 1.txt -WindowStyle Maximized  

# 5.此示例使用“以管理员身份运行”选项启动PowerShell。
Start-Process -FilePath "powershell" -Verb RunAs

# 6.此示例演示如何查找启动进程时可以使用的动词,可用的谓词由进程中运行的文件的文件扩展名决定。
$startExe = New-Object System.Diagnostics.ProcessStartInfo -Args PowerShell.exe
$startExe.verbs
open
runas
runasuser

# 7.为进程指定参数
Start-Process -FilePath "$env:comspec" -ArgumentList "/c dir `"%systemdrive%\program files`""
Start-Process -FilePath "$env:comspec" -ArgumentList "/c","dir","`"%systemdrive%\program files`""

# 8.示例在Linux上启动PowerShell的后台实例,该实例即使在关闭启动会话后仍保持活动状态。nohup命令在当前目录的nohup.out文件中收集输出。
# 为了避免在类Unix平台上终止子进程,可以将Start进程与nohup结合起来。
Start-Process nohup 'pwsh -noprofile -c "1..120 | % { Write-Host . -NoNewline; sleep 1 }"'

3) Wait-Process 基础使用

代码语言:javascript
复制
# 1.停止进程并等待
PS C:\> $nid = (Get-Process notepad).id
PS C:\> Stop-Process -Id $nid
PS C:\> Wait-Process -Id $nid

# 2.指定进程进行等待
Wait-Process -Id 5600
$p = Get-Process notepad
Wait-Process -Id $p.id
Wait-Process -InputObject $p

# 3.等待10秒,等待Outlook和notepad进程停止。如果两个进程都未停止,cmdlet将显示非终止错误并显示命令提示符。
Wait-Process -Name Outlook,notepad -Timeout 10

4) Stop-Process 基础使用

代码语言:javascript
复制
# 1.停止进程 ( spps / kill)
Stop-Process -ID 7960
Stop-Process -Name notepad -Force  #强制结束

# 2.进程停止的四种方法(补充)
# 纯cmdlet命令
Get-Process -Name notepad | Stop-Process
# cmdlet+遍历
Get-Process -Name notepad | foreach-object{$_.Kill()} 
# WMI 对象 + 遍历 + 对象方法 
Get-WmiObject Win32_Process -Filter "name = 'notepad.exe'" | ForEach-Object{$_.Terminate()  | Out-Null }
# WMI 对象 + 遍历 + cmdlet方法
Get-WmiObject Win32_Process -Filter "name = 'notepad.exe'" | Invoke-WmiMethod -Name Terminate | Out-Null

5) Debug-Process 基础使用

代码语言:javascript
复制
# 1.将调试器附加到以指定字符串开头的所有进程动力壳
Debug-Process -Name "SQL*"

# 2.将调试器附加到多个进程(名称或者id)
PS C:\> Debug-Process "Winlogon", "Explorer", "Outlook"
PS C:\> Debug-Process -Id 1132, 2028

0x03 服务查看和管理

Get-Service 命令 - 获取服务信息

New-Service 命令 - 创建新的Windows服务

Restart-Service 命令 - 重新启动服务

Resume-Service 命令 - 恢复挂起服务

Set-Service 命令 - 配置服务

Start-Service 命令 - 开启服务

Stop-Service 命令 - 停止服务

Suspend-Service 命令 - 延缓挂起服务

描述: 服务常用的cmdlet命令:

代码语言:javascript
复制
> (Get-Command *-Service).Name
Get-Service
New-Service
Restart-Service
Resume-Service 
Set-Service
Start-Service
Stop-Service
Suspend-Service

参数说明:

代码语言:javascript
复制
StartupType : 启动类型支持的参数值(Automatic/Boot/Disabled/Manual/System)

基础语法:

代码语言:javascript
复制
# - New-Service
New-Service [-Name] <System.String> [-BinaryPathName] <System.String> [-Credential <System.Management.Automation.PSCredential>] [-DependsOn <System.String[]>] [-Description <System.String>] [-DisplayName <System.String>] [-StartupType {Boot | System | Automatic | Manual | Disabled}] [-Confirm] [-WhatIf] [<CommonParameters>]


# - 参数解析 -
StartupType : 启动类型支持的参数值(Automatic/Boot/Disabled/Manual/System)

基础信息:

代码语言:javascript
复制
# 1.系统服务信息获取
Get-Service -Name RpcSs
# Status   Name               DisplayName                      
# ------   ----               -----------        
# Running  RpcSs              Remote Procedure Call (RPC)  
Get-Service RpcSs -RequiredServices   # 查看其被依赖的的服务  
# Running  DcomLaunch         DCOM Server Process Launcher     
# Running  RpcEptMapper       RPC Endpoint Mapper  

Get-Service | ? {$_.Name -like "B*"}   # 获取以B开头的服务相关信息
Get-service | Where-Object {$_.Status -eq "Running"} # 对象有哪些属性后就可以采取过滤 $_表示当前对象
Get-Service w32time | Where {$_.status -eq 'Stopped'} |  Start-Service  # 判断w32time服务状态如果是停止状态则启动w32time服务
 
Get-service | Select-Object -First 1 | Get-Member -MemberType Property
Get-Service -Name TermService | Select-Object -Property *


# 使用 cmdlet 执行该操作(如果存在)继续操作,并启动 Windows 时间服务,但这次使用 cmdlet 启动服务。
Get-Service -Name w32time | Start-Service -PassThru
  #显示具体属性说明(如下)
Get-service | Select-Object -First 1 | Format-List *          #显示具体的属性值


# 2.启动服务
Start-Service RpcSs
Start-Service -Name "*RpcSs*"
Get-Service w32time | Start-Service -PassThru

# 3.暂停服务
Stop-Service RpcSs -Force  # 强制暂停
Get-Service w32time | Stop-Service -PassThru

# 4.延缓挂起服务
Suspend-Service 

# 5.设置服务自动启用
Set-Service -DisplayName "手机网络时间" -StartupType Automatic
Get-Service w32time

New-Service

代码语言:javascript
复制

实际案例:

代码语言:javascript
复制
# 1) Windows 上 Prometheus 节点采集服务创建并设置防火墙访问规则
# - 自启动服务创建并且启动服务
$exporterVersion="0.16.0"
$params = @{
  Name = "windows_exporter_service"
  BinaryPathName = "d:\pro\windows_exporter-0.16.0-amd64 --config.file=d:\pro\config.yml"
  DisplayName = "windows_exporter_service"
  StartupType = "Automatic"
  Description = "windows exporter service open 9100 port!"
}
New-Service @params | Start-Service -PassThru
# - 防火墙规则设置(只允许10.0.0.2机器访问)
New-NetFirewallRule -Name "windows_exporter_service" -DisplayName "windows_exporter_service" -Description "windows_exporter_service" -Direction Inbound -LocalPort 9100 -RemoteAddress 10.0.0.2 -Protocol TCP -Action Allow -Enabled True
Get-NetFirewallRule -Name "windows_exporter_service" | Format-Table
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 命令 -
  • 0x00 系统远程访问管理
    • Enable-PSRemoting 命令 - 将计算机配置为接收远程命令。
      • Disable-PSRemoting 命令 - 禁用Windows PowerShell远程会话配置
      • 0x01 计算机管理配置
        • Rename-Computer 命令 - 更改计算机名称
          • Restart-Computer 命令 - 在本地和远程计算机上重新启动操作系统。
            • Stop-Computer 命令 - 停止(关闭)本地和远程计算机
            • 0x02 进程查看和管理
              • Get-Process 命令 - 获取在本地计算机或远程计算机上运行的进程
                • Start-Process 命令 - 启动在本地计算机或远程计算机未运行进程
                  • Stop-Process 命令 - 停止在本地计算机或远程计算机上运行的进程
                    • Wait-Process 命令 - 使在本地计算机或远程计算机上运行的进程等待
                      • Debug-Process 命令 - 调试本地计算机上运行的一个或多个进程。
                      • 0x03 服务查看和管理
                        • Get-Service 命令 - 获取服务信息
                          • New-Service 命令 - 创建新的Windows服务
                            • Restart-Service 命令 - 重新启动服务
                              • Resume-Service 命令 - 恢复挂起服务
                                • Set-Service 命令 - 配置服务
                                  • Start-Service 命令 - 开启服务
                                    • Stop-Service 命令 - 停止服务
                                      • Suspend-Service 命令 - 延缓挂起服务
                                      相关产品与服务
                                      多因子身份认证
                                      多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
                                      领券
                                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档