[TOC]

0x00 PS 基础介绍

描述: PowerShell 是构建于 .NET 上基于任务的命令行 shell 和脚本语言。 PowerShell 可帮助系统管理员和高级用户快速自动执行用于管理操作系统(Linux、macOS 和 Windows)和流程的任务, 其实可以看做是C#的简化版本还与PHP语言有相似之处(语法),与我们可以采用ISE 集成脚本环境进行PS脚本脚本编写;

Tips : 多年来,PowerShell 已有很多版本发布。 最初,Windows PowerShell 是在 .NET Framework 基础之上构建而成,仅适用于 Windows 系统。 在最新版本中PowerShell 使用 .NET Core 5.0 作为运行时,此时它可以在 Windows、macOS 和 Linux 平台上运行。

Q: PowerShell VS Shell?

答: PS脚本语言与Linux上的Shell有一致之处, 虽然现在服务器基本都采用Linux,但是针对于某些数据库安装环境也还必须是Windows或者是在线上的应用无法迁移到Linux,而Windows中的Bat无疑是太旧太老,不如PowerShell功能强大并且支持模块化编程。这也是我为什么脱离了Bat而进入PS坑的原因;


Powershell特点:

  • PowerShell 命令可以从命令行管理计算机(十分方便)。
  • PowerShell Core 支持 Windows、macOS 和 Linux 平台,一般运行在window7-window server 2012及以上自带的个人pc和服务器上使用普遍;
  • PowerShell 提供程序可让你访问数据存储(如注册表和证书存储),与你访问文件系统一样方便。
  • PowerShell 具有丰富的表达式分析器和完全开发的脚本语言
  • PowerShell 旨在消除长期存在的问题和添加新功能,从而改进命令行和脚本环境。
  • PowerShell 结合了交互式 shell 和脚本编写环境,可以访问命令行工具(命令系列是可扩展的)、COM 对象和 .NET 类库。
  • PowerShell 基于对象而非文本,所以输出是基于对象的。
  • PowerShell 基于.NET Framework 构建它与 C# 编程语言共享一些语法功能和关键字。
  • PowerShell 是开放源代码项目 Github


设计目标:

  • 可发现性:管理系统是一项复杂的任务。 具有一致的接口的工具有助于控制固有的复杂性
  • 一致性 : 管理系统是一项复杂的任务,具有一致的接口的工具有助于控制固有的复杂性
  • 交互式脚本编写环境: Windows 命令提示符提供了一个可访问命令行工具和基本脚本的交互式 shell, Windows 脚本宿主 (WSH)具有可编写脚本的命令行工具和 COM 自动化对象,但不提供交互式 shell。
  • 面向对象:PowerShell 基于对象而非文本
  • 交互式脚本编写环境:Windows 命令提示符提供了一个可访问命令行工具和基本脚本的交互式 shell
  • 轻松转换到脚本:借助 PowerShell 的命令可发现性,可以从以交互方式键入命令轻松转换为创建和运行脚本


PowerShell版本:

  • Windows PowerShell: 从 Windows 7 SP1 和 Windows Server 2008 R2 SP1 开始,每个 Windows 中默认随附安装有 Windows PowerShell。
    • PS 3.0 : Windows 7 SP1 (预装) / Windows 8默认安装
    • PS 4.0 : Windows 8.1
    • PS 5.0 : 已被 Windows PowerShell 5.1 取代
    • PS 5.1 : Windows 10 / Windows Server 2016
    • 6.0 / 7.0 / 7.1 : PowerShell Core:微软为了贴近Linux增加其系统的扩展性,在Windows中内置了Linux系统并且同时开源了PowerShell Core了,利用它我们就可以跨平台进行管理计算机了;

注意: Windows PowerShell 是为 .NET Framework 编写的,而 PowerShell Core 是为 .NET Core 编写的。 可移植模块是同时适用于 Windows PowerShell 和 PowerShell Core 的模块。

PowerShell 7: 是专为云、本地和混合环境设计的,它包含增强功能和新功能。

  • 与 Windows PowerShell 并行安装和运行
  • 提升了与现有 Windows PowerShell 模块的兼容性
  • 新语言功能(如三元运算符和 ForEach-Object -Parallel)
  • 提高了性能
  • 基于 SSH 的远程处理
  • 跨平台互操作性
  • 支持 Docker 容器


PowerShell系统要求

  • 操作系统要求: Windows 7 Service Pack 1~Windows Server 2019 (注意区间中的各个PS版本)
  • PowerShell Core == .NET Core (>= 6.x)
  • Microsoft .NET Framework 要求
    • PS 5.1 == .NET Framework 4.5
    • PS 5.0 == .NET Framework 4.5
    • PS 4.0 == .NET Framework 4.5
    • PS 3.0 == .NET Framework 4
  • Windows Management Framework 4.0
  • WS-Management 3.0
  • Windows Management Instrumentation 3.0
  • 公共语言运行时 4.0
  • 图形用户界面要求

参考网站:
Powershell Core : 新的PowerShell版本:https://aka.ms/pscore6
Micrisoft PowerShell Docs : https://msdn.microsoft.com/powershell/scripting/setup/windows-powershell-system-requirements
PowerShell 中文文档: https://docs.microsoft.com/zh-cn/powershell/
PowerShell 在线教程: https://www.pstips.net/powershell-online-tutorials


0x01 PS 生命周期

描述: PowerShell 是独特的工具和组件集,该集从 Windows PowerShell 单独传输、安装和配置。

PowerShell 7 生命周期说明: 发布 PowerShell 7 后,PowerShell 继续受 Microsoft 新式生命周期策略支持,但支持日期链接到 .NET Core 的支持生命周期。 在此服务方法中,客户可以选择长期支持 (LTS) 版本或当前版本。

Tips : 必须安装最新的修补程序更新才能获得支持。 例如如果你运行的是 PowerShell 7.0,并且已发布 7.0.1,则必须更新到 7.0.1 才能获得支持。

PowerShell 历史版本:

1
2
3
4
5
6
7
8
9
10
11
12
版本	发布日期	注意
PowerShell 7.1(当前版本) 2020 年 11 月 基于 .NET Core 5.0(当前版本)生成。
PowerShell 7.0 (LTS) 2020 年 3 月 基于 .NET Core 3.1 (LTS) 生成。
PowerShell 6.2 2019 年 3 月
PowerShell 6.1 2018 年 9 月 基于 .NET Core 2.1 生成。
PowerShell 6.0 2018 年 1 月 第一版,基于 .NET Core 2.0 生成。 可在 Windows、Linux 和 macOS 上安装。
PowerShell 5.1 2016 年 8 月 在 Windows 10 周年更新和 Windows Server 2016 中发布。
PowerShell 5.0 2016 年 2 月 在 Windows Management Framework (WMF) 5.0 中发布。
PowerShell 4.0 2013 年 10 月 在 Windows 8.1 中与 Windows Server 2012 R2 集成。 可在 Windows 7 SP1、Windows Server 2008 R2 SP1 和 Windows Server 2012 上安装。
PowerShell 3.0 2012 年 10 月 在 Windows 8 中与 Windows Server 2012 集成。 可在 Windows 7 SP1、Windows Server 2008 SP1 和 Windows Server 2008 R2 SP1 上安装。
PowerShell 2.0 2009 年 7 月 在 Windows 7 中与 Windows Server 2008 R2 集成。 可在 Windows XP SP3、Windows Server 2003 SP2 和 Windows Vista SP1 上安装。
PowerShell 1.0 2006 年 11 月 可在 Windows XP SP2、Windows Server 2003 SP1 和 Windows Vista 上安装。 Windows Server 2008 的可选组件。


PowerShell支持7.0与7.1版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
平台	7.0	7.1
Windows 8.1 和 10 支持 支持
Windows Server 2012 R2、2016、2019 支持 支持
Windows Server 半年频道 支持 支持
Ubuntu 16.04、18.04 支持 支持
Ubuntu 20.04 不支持 支持
Ubuntu 19.10、20.10(通过 Snap 包) 社区 支持
Debian 9 支持 支持
Debian 10 支持 支持
CentOS 7 支持 支持
CentOS 8 支持 支持
Red Hat Enterprise Linux 7 支持 支持
Red Hat Enterprise Linux 8 支持 支持
Fedora 31+ 支持 不支持
Alpine 3.10 查看注释 1 不支持
Alpine 3.11+ 查看注释 1 查看注释 1
macOS 10.13+ 支持 支持
Arch 社区 社区
Raspbian 社区 社区
Kali 社区 社区
AppImage(可在多个 Linux 平台上运行) 社区 社区
Snap 包 查看注释 2 查看注释

Tips: 备注

  • 1 - Alpine 不支持 CIM、PowerShell 远程处理和 DSC。
  • 2 - Snap 包与正在运行此包的发行版受到相同的支持。

安全服务标准
描述: PowerShell 遵守 Microsoft 的 Windows 安全服务标准。

1
2
3
4
5
6
功能	类型
执行策略 深层防御
系统锁定 - 通过 AppLocker 深层防御
受约束的语言模式 - 通过 AppLocker 深层防御
系统锁定 - 通过 WDAC 安全功能
受约束的语言模式 - 通过 WDAC 安全功能

Reference: PowerShell 支持生命周期参考


0x03 PS 基础安装

PowerShell 是 GitHub 上的开放源代码项目(https://github.com/PowerShell/PowerShell/),其可以安装在多个操作系统平台之上:

  • 在 Windows 上安装 PowerShell
  • 在 Linux 上安装 PowerShell
  • 在 macOS 上安装 PowerShell
  • 在 ARM 上安装 PowerShell


Windows 安装方式

描述: 若要在 Windows 上安装 PowerShell,请从 GitHub 下载最新安装包:

1
2
3
4
PowerShell-7.1.3-win-x64.msi
PowerShell-7.1.3-win-x64.zip
PowerShell-7.1.3-win-x86.msi
PowerShell-7.1.3-win-x86.zip

在安装过程中创建注册表项:
描述: 从 PowerShell 7.1 开始,MSI 包将创建用于存储 PowerShell 安装位置和版本的注册表项。 这些值位于 HKLM\Software\Microsoft\PowerShellCore\InstalledVersions\ 中。 每种内部版本类型(发行版或预览版)、主要版本和体系结构的 的值都是唯一的。

1
2
3
4
5
发布	体系结构	注册表项
7.1.x 版本 x86 HKLM\Software\Microsoft\PowerShellCore\InstalledVersions\1d00683b-0f84-4db8-a64f-2f98ad42fe06
7.1.x 版本 X64 HKLM\Software\Microsoft\PowerShellCore\InstalledVersions\31ab5147-9a97-4452-8443-d9709f0516e1
7.1.x 预览版 x86 HKLM\Software\Microsoft\PowerShellCore\InstalledVersions\86abcfbd-1ccc-4a88-b8b2-0facfde29094
7.1.x 预览版 X64 HKLM\Software\Microsoft\PowerShellCore\InstalledVersions\39243d76-adaf-42b1-94fb-16ecf83237c8

Tips : 管理员和开发人员可以使用此值查找 PowerShell 的路径。 所有预览版本和次要版本的 值都是相同的。 每个主要版本的 值都有所变化。


安装方式:

  • 安装 MSI 包 : 下载后双击安装程序并按照提示进行操作。

    1
    2
    3
    4
    5
    6
    1.安装程序在 Windows“开始”菜单中创建一个快捷方式。
    # 默认情况下,包安装位置为 $env:ProgramFiles\PowerShell\<version>
    # 可以通过“开始”菜单或 $env:ProgramFiles\PowerShell\<version>\pwsh.exe 启动 PowerShell
    2.PowerShell 7.1 安装到新目录,并与 Windows PowerShell 5.1 并行运行。
    # PowerShell 7.1 是就地升级,升级后会替换 PowerShell 6.x 或 PowerShell 7.0。
    # 如果需要与其他版本并行运行 PowerShell 7.1,请使用 ZIP 安装方法将其他版本安装到其他文件夹。
  • 安装 ZIP 包 : 提供有 PowerShell 二进制 ZIP 存档,从而支持高级部署方案, Tips 与安装 MSI 包不一样,安装 ZIP 存档不会检查先决条件(所以你需要检测自己是否满足先决条件)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    你可以使用此方法安装任何版本的 PowerShell,包括最新版本:
    # 稳定版:https://aka.ms/powershell-release?tag=stable
    # 预览版:https://aka.ms/powershell-release?tag=preview
    # LTS 版本:https://aka.ms/powershell-release?tag=lts

    按版本列出的安装位置:
    # Windows PowerShell 5.1:$env:WINDIR\System32\WindowsPowerShell\v1.0
    # PowerShell Core 6.x:$env:ProgramFiles\PowerShell\6
    # PowerShell 7:$env:ProgramFiles\PowerShell\7
  • 在 Nano Server 上进行部署: 若要将 PowerShell 部署到 Nano Server,请按照以下步骤操作。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 1.连接到 Windows PowerShell 的内置实例
    $session = New-PSSession -ComputerName <Nano Server IP address> -Credential <An Administrator account on the system>

    # 2.将文件复制到 Nano Server 实例
    Copy-Item <local PS Core download location>\powershell-<version>-win-x64.zip c:\ -ToSession $session


    # 3.输入会话
    Enter-PSSession $session

    # 4.提取 ZIP 文件
    # Insert the appropriate version.
    Expand-Archive -Path C:\powershell-<version>-win-x64.zip -DestinationPath "C:\PowerShell_<version>"

    # 如果需要基于 WSMan 的远程处理,请按照说明使用[“另一种实例技术”][]创建远程处理终结点。
  • 通过 Winget 安装 PowerShell : 通过 winget 命令行工具,开发人员可以在 Windows 10 计算机上查找、安装、升级、删除和配置应用程序。 此工具是 Windows 程序包管理器服务的客户端接口(目前 winget 是预览功能 - 2021年3月25日 09:44:23)。

  • 从 Microsoft Store 安装


Tips : 如何创建远程处理终结点?
PowerShell 同时支持采用 WSMan 和 SSH 的 PowerShell 远程处理协议 (PSRP)

在 PowerShell Core 中进行 SSH 远程处理
在 PowerShell Core 中进行 WSMan 远程处理

Reference: 安装各种版本的 PowerShell


Linux 安装方式

描述: GitHub 版本页面上提供有所有可用包,安装包以后从终端运行 pwsh 如果是预览版则是pwsh-preview。。

Tips : PowerShell 7 是就地升级,升级后会删除 PowerShell Core 6.x。

  • /usr/local/microsoft/powershell/6 文件夹被替换为 /usr/local/microsoft/powershell/7
  • 如果需要与 PowerShell 7 并行运行 PowerShell 6,请使用二进制存档方法重新安装 PowerShell 6。

Tips :对于未获得官方支持的 Linux 分发,可尝试使用 PowerShell Snap 包安装 PowerShell。 还可尝试直接使用 Linux tar.gz存档 部署 PowerShell 二进制文件,但是需要在各个步骤中基于 OS 设置必要的依赖项。

安装方式:

  • 1.主流:
    • 官方支持的版本(通过包存储库安装/通过直接下载进行安装)
    • 社区支持的版本
  • 2.备选:
    • Snap 包
    • 二进制存档
    • .NET 全局工具

Ubuntu 20.04

  • 1.通过包存储库安装 - Ubuntu 20.04
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    # Update the list of packages
    sudo apt-get update
    # Install pre-requisite packages.
    sudo apt-get install -y wget apt-transport-https software-properties-common
    # Download the Microsoft repository GPG keys
    wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb
    # Register the Microsoft repository GPG keys
    sudo dpkg -i packages-microsoft-prod.deb
    # Update the list of products
    sudo apt-get update
    # Enable the "universe" repositories
    sudo add-apt-repository universe
    # Install PowerShell
    sudo apt-get install -y powershell
    # Start PowerShell
    pwsh

    # 验证安装得PowerShell
    PS /home/weiyigeek/> $PSVersionTable
    # Name Value
    # ---- -----
    # PSVersion 7.1.3
    # PSEdition Core
    # GitCommitId 7.1.3
    # OS Linux 5.8.0-38-generic #43~20.04.1-Ubuntu SMP Tue Jan 12 16:39:47 U\u2026
    # Platform Unix
    # PSCompatibleVersions {1.0, 2.0, 3.0, 4.0\u2026}
    # PSRemotingProtocolVersion 2.3
    # SerializationVersion 1.1.0.1
    # WSManStackVersion 3.0

    [email protected]:~/
    > dpkg --list | grep "powershell"
    ii powershell 7.1.3-1.ubuntu.20.04 amd64 PowerShell is an automation and configuration management platform.
WeiyiGeek.PowerShell-ubuntu

WeiyiGeek.PowerShell-ubuntu

  • 2.通过将 Debian 包 powershell_7.1.3-1.ubuntu.20.04_amd64.deb 下载到 Ubuntu 计算机。
    1
    2
    3
    sudo dpkg -i powershell_7.1.3-1.ubuntu.20.04_amd64.deb
    # dpkg -i 命令失败,未满足依赖项。 下一命令 apt-get install -f 解决此类问题,然后完成 PowerShell 包配置。
    sudo apt-get install -f

Tips : 卸载 - Ubuntu 20.04 sudo apt-get remove powershell


Red Hat Enterprise Linux (RHEL) 7
描述: 为简化安装和更新,已将适用于 Linux 的 PowerShell 发布到正式的 Microsoft 存储库()。

1
2
3
4
5
6
7
8
9
10
11
12
# 方式1.以超级用户身份注册 Microsoft 存储库一次。 注册后,可以通过 sudo yum update powershell 更新 PowerShell。
# Register the Microsoft RedHat repository
curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo
# Install PowerShell
sudo yum install -y powershell
# Start PowerShell
pwsh

# 方式2.将 RPM 包 powershell-7.1.3-1.rhel.7.x86_64.rpm 下载到 Red Hat Enterprise Linux 计算机
sudo yum install powershell-7.1.3-1.rhel.7.x86_64.rpm
# 无需该中间下载步骤即可安装 RPM
sudo yum install https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/powershell-7.1.3-1.rhel.7.x86_64.rpm

Tips : 卸载 - Red Hat Enterprise Linux (RHEL) 7 sudo yum remove powershell


Kali
Kali 支持不受 Microsoft 的官方支持且由社区维护。

1
2
3
4
5
6
7
8
9
# 1.安装 - Kali
# Install PowerShell package
apt update && apt -y install powershell
# Start PowerShell
pwsh

# 2.卸载 - Kali
# Uninstall PowerShell package
apt -y remove powershell


Debian 10
描述: Debian 10 仅在 PowerShell 7.0 以及更新版本中受到支持。

  • 1.通过包存储库安装 - Debian 10

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # Download the Microsoft repository GPG keys
    wget https://packages.microsoft.com/config/debian/10/packages-microsoft-prod.deb

    # Register the Microsoft repository GPG keys
    sudo dpkg -i packages-microsoft-prod.deb

    # Update the list of products
    sudo apt-get update

    # Install PowerShell
    sudo apt-get install -y powershell

    # Start PowerShell
    pwsh
  • 2.将 tar.gz 包 powershell-7.1.3-linux-x64.tar.gz 下载到 Debian 计算机。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    sudo apt-get update
    # install the requirements
    sudo apt-get install -y \
    less \
    locales \
    ca-certificates \
    libicu63 \
    libssl1.1 \
    libc6 \
    libgcc1 \
    libgssapi-krb5-2 \
    liblttng-ust0 \
    libstdc++6 \
    zlib1g \
    curl

    # Download the powershell '.tar.gz' archive
    curl -L https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/powershell-7.1.3-linux-x64.tar.gz -o /tmp/powershell.tar.gz

    # Create the target folder where powershell will be placed
    sudo mkdir -p /opt/microsoft/powershell/7

    # Expand powershell to the target folder
    sudo tar zxf /tmp/powershell.tar.gz -C /opt/microsoft/powershell/7

    # Set execute permissions
    sudo chmod +x /opt/microsoft/powershell/7/pwsh

    # Create the symbolic link that points to pwsh
    sudo ln -s /opt/microsoft/powershell/7/pwsh /usr/bin/pwsh

    # Start PowerShell
    pwsh


Docker 容器安装方式

描述: 已发布的映像需要 Docker 17.05 或更高版本。 还应在没有 sudo 或本地管理权限的情况下能够运行 Docker。

PowerShell 官方容器: hub.docker.com/r/microsoft/powershell

Windows Docker 文件和映像许可证:

  • Window Server Core
  • Nano Server

1.在容器中使用 PowerShell

1
docker run -it mcr.microsoft.com/powershell

2.在不再需要映像时将其删除

1
docker rmi mcr.microsoft.com/powershell


从 Windows PowerShell 5.1 迁移到 PowerShell 7

描述: 当前Windows10以及Server2019默认的PS版本为5.1为了使用能尝试使用PS 7我们需要进行如下步骤迁移。

Tips : PowerShell 7 与 Windows PowerShell 并行运行,可便于你在部署前轻松地测试和比较各个版本。 迁移简单、快捷、安全,

以下 Windows 操作系统支持 PowerShell 7:

  • Windows 8.1 和 10
  • Windows Server 2012、2012 R2、2016 和 2019

此处以并行使用PowerShell 7 与 Windows PowerShell 5.1 为例进行配置

  • 下功能可确保你的 PowerShell 投资受到保护,并能轻松迁移到 PowerShell 7。
  • 独立的安装路径和可执行文件名
  • 独立的 PSModulePath
  • 每个版本的独立配置文件
  • 提升了模块兼容性
  • 新增了远程处理终结点
  • 组策略支持
  • 独立的事件日志

操作步骤:

  • Step 1.独立的安装路径和可执行文件名
    1
    2
    3
    4
    # 按版本列出的安装位置:
    Windows PowerShell 5.1:$env:WINDIR\System32\WindowsPowerShell\v1.0
    PowerShell Core 6.x:$env:ProgramFiles\PowerShell\6
    PowerShell 7:$env:ProgramFiles\PowerShell\7

Tips : 新位置会添加到 PATH 中,这样就能同时运行 Windows PowerShell 5.1 和 PowerShell 7 了

Tips : 在 Windows PowerShell 中,PowerShell 可执行文件名为 powershell.exe。 在版本 6 及更高版本中,可执行文件名为 pwsh.exe

  • Step 2.独立的 PSModulePath: 默认情况下Windows PowerShell 和 PowerShell 7 将模块存储在不同的位置。 PowerShell 7 将这些位置合并到 $Env:PSModulePath 环境变量中。 当按名称导入模块时PowerShell 检查由 $Env:PSModulePath 指定的位置, 这样 PowerShell 7 就可以同时加载核心模块桌面模块了。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 1.安装范围	Windows PowerShell 5.1	PowerShell 7.0
    PowerShell 模块 $env:WINDIR\system32\WindowsPowerShell\v1.0\Modules $PSHOME\Modules

    用户已安装
    AllUsers 范围 $env:ProgramFiles\WindowsPowerShell\Modules $env:ProgramFiles\PowerShell\Modules

    用户已安装
    CurrentUser 范围 $HOME\Documents\WindowsPowerShell\Modules $HOME\Documents\PowerShell\Modules


    # 2.示例展示了每个版本的 $Env:PSModulePath 默认值
    PS C:\Program Files\PowerShell\> $Env:PSModulePath -split (';')
    C:\Users\WeiyiGeek\Documents\WindowsPowerShell\Modules
    C:\Program Files\WindowsPowerShell\Modules
    C:\Windows\system32\WindowsPowerShell\v1.0\Modules
  • Step 3.独立的配置文件: PowerShell 配置文件是在 PowerShell 启动时执行的脚本。 此脚本通过添加命令、别名、函数、变量、模块和 PowerShell 驱动器来自定义环境。 配置文件脚本让这些自定义对每个会话都可用,而不必手动重新创建它们。

在 PowerShell 7 中,配置文件的位置路径发生了更改。

  • 在 Windows PowerShell 5.1 中,配置文件的位置为 $HOME\Documents\WindowsPowerShell。
  • 在 PowerShell 7 中,配置文件的位置为 $HOME\Documents\PowerShell。

配置文件的文件名也发生了更改:

1
2
3
4
5
PS> $PROFILE | Select-Object *Host* | Format-List
AllUsersAllHosts : C:\Program Files\PowerShell\7\profile.ps1
AllUsersCurrentHost : C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts : C:\Users\<user>\Documents\PowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\<user>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

  • Step 4.实践 PowerShell 7 环境安装配置与PS 5.1并行运行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1) 创建PS 7 家目录
mkdir $env:ProgramFiles\PowerShell\7
# 2) 解压PS 7 到家目录
Expand-Archive .\PowerShell-7.1.3-win-x64.zip -DestinationPath $env:ProgramFiles\PowerShell\7
# 3) 设置环境变量
$systempath = [System.Environment]::GetEnvironmentVariable("PATH","Machine")
$systempath = "C:\Program Files\PowerShell\7"+ ";" + $systempath
[System.Environment]::setEnvironmentVariable("PATH",$systempath,"Machine")
# 4.打开PS执行pwsh.exe进入PS7的版本
PS C:\Windows\system32> pwsh.exe
PS C:\Windows\System32> $PSVersionTable.PSVersion
# Major Minor Patch PreReleaseLabel BuildLabel
# ----- ----- ----- --------------- ----------
# 7 1 3
PS C:\Windows\System32> $ENV:PSModulePath -split ";"
# C:\Users\WeiyiGeek\Documents\PowerShell\Modules
# C:\Program Files\PowerShell\Modules
# c:\program files\powershell\7\Modules # 可以看见模块已经添加
# C:\Users\WeiyiGeek\Documents\WindowsPowerShell\Modules
# C:\Program Files\WindowsPowerShell\Modules
# C:\Windows\system32\WindowsPowerShell\v1.0\Modules
# 5.PS特性可以直接使用ssh命令
PS C:\Windows\System32> ssh -p 20211 [email protected]
  • Step 5.PowerShell 包含组策略设置,有助于为企业环境中的服务器定义一致的选项值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # 1.设置包括:
    * 控制台会话配置:设置运行 PowerShell 的配置终结点。
    * 启用模块日志记录:设置模块的 LogPipelineExecutionDetails 属性。
    * 启用 Power Shell 脚本块日志记录:启用所有 PowerShell 脚本的详细日志记录。
    * 启用脚本执行:设置 PowerShell 执行策略。
    * 启用 PowerShell 脚本:可便于将 PowerShell 命令输入和输出捕获到基于文本的脚本中。
    * 设置 Update-Help 的默认源路径:将“可更新的帮助”的源设置为目录,而不是 Internet。

    # 2.PowerShell 7 在 $PSHOME 中添加组策略模板和安装脚本。
    Get-ChildItem -Path $PSHOME -Filter *Core*Policy*
    # Directory: C:\Program Files\PowerShell\7
    # Mode LastWriteTime Length Name
    # ---- ------------- ------ ----
    # -a--- 2021/3/10 1:19 15898 InstallPSCorePolicyDefinitions.ps1
    # -a--- 2021/3/10 1:07 9675 PowerShellCoreExecutionPolicy.adml
    # -a--- 2021/3/10 1:07 6198 PowerShellCoreExecutionPolicy.admx
  • Step 6.Windows PowerShell 和 PowerShell 7 记录事件来分隔事件日志

    1
    2
    3
    4
    5
    6
    7
    PS C:\Program Files\PowerShell\7> Get-WinEvent -ListLog *PowerShell*
    # LogMode MaximumSizeInBytes RecordCount LogName
    # ------- ------------------ ----------- -------
    # Circular 15728640 6082 Windows PowerShell
    # Circular 15728640 624 Microsoft-Windows-PowerShell/Operational
    # Retain 1048985600 0 Microsoft-Windows-PowerShell/Admin
    # Circular 1052672 0 Microsoft-Windows-PowerShell-DesiredStateConfiguration-FileDownloadManager/Op…
    WeiyiGeek.事件日志

    WeiyiGeek.事件日志

  • Step 7.在 Microsoft 商店安装WindowsTerminal支持多种命令行执行使用
WeiyiGeek.WindowsTerminal

WeiyiGeek.WindowsTerminal

  • Step 7.提升了使用 Visual Studio Code 的编辑体验
    描述: 包含 PowerShell 扩展的 Visual Studio Code (VSCode) 是 PowerShell 7 支持的脚本环境

Tips : 更新后的 PowerShell 扩展包括:

  • 新增了 ISE 兼容性模式
  • 集成控制台中的 PSReadLine,包括语法突出显示、多行编辑和退回搜索
  • 提升了稳定性和性能
  • 新增了 CodeLens 集成
  • 提升了路径自动完成

Tips : 若要更轻松地转换到 Visual Studio Code,请使用“命令面板”中的“启用 ISE 模式”功能即请按 Ctrl+Shift+P 打开“命令面板”,键入“PowerShell”,然后选中“PowerShell:启用 ISE 模式”。

Tips : 若要将布局设置为原始布局,请打开“命令面板”,然后选中“PowerShell:禁用 ISE 模式(还原为默认值)”。

WeiyiGeek.VScode-PS

WeiyiGeek.VScode-PS


0x04 PS 运行模式

PS控制台有两种模式:

  • Powershell标准模式(默认):鼠标右击选择标记后才能实现复制和粘切功能。
  • Powershell快速编辑模式:可以通过鼠标左键选择任意矩形区域内的文本,并且鼠标右击实现复制功能。

Tips :快速编辑模式和标准模式的切换可以通过控制台标题栏->鼠标右击->属性->选项->编辑选项


PS快捷键:
Powershell的快捷键和cmd以及linux中的shell 都比较像。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
PgUp PgDn 	显示当前会话的第一个命令和最后一个命令
Enter 执行当前命令
End 将光标移至当前命令的末尾
Del 从右开始删除输入的命令字符
Esc 清空当前命令行 (V)
ALT+F7 清除命令的历史记录 (V)
F2 自动补充历史命令至指定字符(例如历史记录中存在Get-Process,按F2,提示"Enter char to copy up to",键入‘s’,自动补齐命令:Get-Proce) (V)
F4 删除命令行至光标右边指定字符处 (V)
F7 对话框显示命令行历史记录
F8 检索包含指定字符的命令行历史记录
F9 根据命令行的历史记录编号选择命令,历史记录编号可以通过F7查看
左/右方向键 左右移动光标
上/下方向键 切换命令行的历史记录
Home 光标移至命令行最左端
Backspace 从右删除命令行字符
Ctrl+C 取消正在执行的命令
Ctrl+左/右方向键 在单词之间移动光标
Ctrl+Home 删除光标最左端的所有字符 (V)
Tab 自动补齐命令或者文件名


0x05 命名规则

描述:PowerShell 有一套推荐的标准谓词名,PS使用“谓词 - 名词”命名系统, 每个 cmdlet 名称都由一个标准谓词、连字符和特定名词组成,一般的谓词与名称的首字母为大写(在编程中需要抱持良好的风格);

比如:PowerShell 具有Get-Process、Stop-Process、Get-Service 和 Stop-Service 一看就一目了然等命令。说白了原来您需要记忆100个命令现在只需要10个谓词和 10 个名词就能搞定;
PowerShell 利用这些相似之处减少了解和使用 cmdlet 时需要知道的不同名称的数量。

Cmdlet 使用标准参数以及命令名称

  • PS标准化参数分隔符,参数名称前面始终带有“-”
    • Get-Command -Name Clear-Host

  • 帮助参数 (?):在任何 cmdlet 上指定 -? 参数时,PowerShell 将显示该 cmdlet 的帮助。
    • Get-Service -?

  • 通用参数: 参数由 PowerShell 引擎控制, 通用参数的行为方式始终相同。
    • 通用参数: WhatIf、Confirm、Verbose、Debug、Warn、ErrorAction、ErrorVariable、OutVariable 和 OutBuffer

  • 建议的参数名称:PowerShell 核心 cmdlet 使用标准名称
    • 指示计算机的参数的建议名称是 ComputerName,而不是 Server、Host、System、Node 或其他常见的备选单词。 其他重要的建议参数名称是 Force、Exclude、Include、PassThru、Path 和 CaseSensitive。

  • PS支持别名以通过备用名称引用命令(Get-Alias获取别名),别名将新名称与其他命令关联。
    • 例如,PS 具有名为 Clear-Host 的内部函数,该函数清空输出窗口。 可以在命令提示符下键入cls 或 clear 别名, PS解释这些别名并运行Clear-Host 函数

  • 解释标准别名:PS 别名尝试兼顾清晰度和简洁性(可以进行缩写-进截取谓词第一个字母和名词的前两个字母)
    • 比如: 熟悉 PowerShell 别名后就很容易猜到 sal 别名指的是 Set-Alias , 又比如gcm等同于Get-Command


PS 支持几种其他类型的命令:

  • 别名:Alias
  • 功能:Function
  • 脚本:Script


备注:

  • 在 PowerShell v6 之前 sc 是 Set-Content cmdlet 的别名。
  • 因此若要在 v6 之前的 PowerShell 版本中运行 sc.exe 命令,必须使用包含文件扩展名 exe的完整文件名 sc.exe。
  • 外部可执行文件,或具有已注册的文件类型处理程序的文件也被归类为命令。

0x06 基础命令

描述:Windows PowerShell 引入了 cmdlet(读作command-let)的概念,它是内置于 Shell 的简单的单一函数命令行工具。
Windows PowerShell 包括一百多个基本核心 cmdlet 你可以编写自己的 cmdlet 并与其他用户共享。

启动PowerShell非常简单直接在CMD命令行之中:

  • PowerShell

  • PowerShell_ISE

TIPS: 默认键入一个字符串PS会将它原样输出,如果该字符串是一个命令或者启动程序,在字符串前加‘&’可以执行命令,或者启动程序。

1
2
3
4
5
6
7
8
PS C:\Users\WeiyiGeek> "ls"
ls
PS C:\Users\WeiyiGeek> &"ls"
# 目录: C:\Users\WeiyiGeek
# Mode LastWriteTime Length Name
# ---- ------------- ------ ----
# d----- 2019/7/26 8:45 .android
# d----- 2019/8/19 17:27 .config


PS 版本查看命令

描述: 可以采用变量或者host命令的方式进行查看。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 方式1.查看PS的主此版本
PS C:\Program Files> $PSVersionTable
# Name Value
# ---- -----
# PSVersion 5.1.19041.610
# PSEdition Desktop
# PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
# BuildVersion 10.0.19041.610
# CLRVersion 4.0.30319.42000
# WSManStackVersion 3.0
# PSRemotingProtocolVersion 2.3
# SerializationVersion 1.1.0.1

PS C:\Program Files> $PSVersionTable.PSVersion
# Major Minor Build Revision
# ----- ----- ----- --------
# 5 1 19041 610

# 方式2.采用host得方式
PS C:\Program Files> host
Name : ConsoleHost
Version : 5.1.19041.610 # 当前版本
InstanceId : 3af22fd4-3ade-4c0d-ab67-7c77cf08223a
UI : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture : zh-CN
CurrentUICulture : zh-CN
PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
DebuggerEnabled : True
IsRunspacePushed : False
Runspace : System.Management.Automation.Runspaces.LocalRunspace


Get-Command 获取命令

描述:利用Get-Command可以采用通配符进行匹配查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#0.查看指定的Cmdlet命令/Function的信息
PS> Get-Command -Name Clear-Host
# CommandType Name Version Source
# ----------- ---- ------- ------
# Function Clear-Host


#1.例如若要查找用于查看和更改 Windows 服务的 cmdlet 列表,请键入:
PS> Get-Command *-Service
PS> Get-Command -Noun Service #使用 Noun 参数查看将对同一类型的对象产生影响的命令系列,效果同上|
# CommandType Name Version Source
# ----------- ---- ------- ------
# Cmdlet Get-Service 3.1.0.0 Microsoft.PowerShell.Management
# Cmdlet New-Service 3.1.0.0 Microsoft.PowerShell.Management
# ...

#2.例如若要查看使用谓词 Get 的所有 cmdlet
PS> Get-Command -Verb Get # Verb 参数列出包含特定谓词的所有命令(以Get开头的Cmdlet命令)
# CommandType Name Version Source
# ----------- ---- ------- ------
# Alias Get-AppPackage 2.0.1.0 Appx
# Alias Get-AppPackageDefaultVolume 2.0.1.0 Appx


#3.获取有关命令的信息返回每个 cmdlet 语法的 Syntax 参数
PS> Get-Command Get-Help -Syntax
# Get-Help [[-Name] <string>] [-Path <string>] [-Category <string[]>] [-Component <string[]>] [-Functionality <string[]>] [-Role <string[]>] [-Full] [<CommonParameters>]


#4.使用 CommandType 参数可以获取其他类型的本机命令
Get-Command -CommandType [Alias|Function|Script]


Get-help 帮助命令

描述:可以利用Get-help来进行查找Powershell的命令帮助;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#1.例如,下面的命令显示 Get-Service cmdlet 的输出对象成员的相关信息。
Get-help Get-service
Get-Help Get-Service -Online #若要联机查看此 cmdlet 的帮助主题,转到 https://go.microsoft.com/fwlink/?LinkID=113332
#备注:Get-Help 在此计算机上找不到该 cmdlet 的帮助文件它仅显示部分帮助。


#2.若要在会话中获取所有 cmdlet 帮助文章的列表,请键入
Get-Help -Category Cmdlet
Get-Help Get-ChildItem -Detailed #若要显示详细信息,请使用Detailed 参数
Get-Help Get-ChildItem -Full #若要显示帮助文章中的所有内容,请使用 Full 参数
Get-Help Get-ChildItem -Parameter * #若要获取有关 cmdlet 的参数的详细帮助,请使用的 Parameter 参数

#3.获取Cmdlet命令显示帮助文章中的示例,
Get-Help Get-ChildItem -Examples

#4.获取有关脚本和函数的帮助
Get-Help c:\ps-test\TestScript.ps1 # 但是在运行 Get-Help * 时不会显示函数和脚本的帮助


Help 命令帮助

描述:若要一次显示每篇帮助文章的一页,请使用 help 函数或其别名 man

基础实例:

1
2
3
#1.例如,若要显示 Get-ChildItem cmdlet 的帮助信息
man Get-ChildItem
help Get-ChildItem


Update-Help 更新帮助

描述:若要下载并安装包含此 cmdlet 的模块的帮助文件,请使用 Update-Help。

1
Update-Help Get-service

WeiyiGeek.

WeiyiGeek.


Get-Alias 获取别名

描述:Get-Alias cmdlet 显示与别名关联的本机 PowerShell 命令的真实名称。

PS: 别名情况一览

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
CommandType     Name                                               Version    Source                                   
----------- ---- ------- ------
Alias % -> ForEach-Object
Alias ? -> Where-Object
Alias ac -> Add-Content
Alias asnp -> Add-PSSnapin
Alias cat -> Get-Content
Alias cd -> Set-Location
Alias CFS -> ConvertFrom-String 3.1.0.0 Microsoft.PowerShell.Utility
Alias chdir -> Set-Location
Alias clc -> Clear-Content
Alias clear -> Clear-Host
Alias clhy -> Clear-History
Alias cli -> Clear-Item
Alias clp -> Clear-ItemProperty
Alias cls -> Clear-Host
Alias clv -> Clear-Variable
Alias cnsn -> Connect-PSSession
Alias compare -> Compare-Object
Alias copy -> Copy-Item
Alias cp -> Copy-Item
Alias cpi -> Copy-Item
Alias cpp -> Copy-ItemProperty
Alias curl -> Invoke-WebRequest
Alias cvpa -> Convert-Path
Alias dbp -> Disable-PSBreakpoint
Alias del -> Remove-Item
Alias diff -> Compare-Object
Alias dir -> Get-ChildItem
Alias dnsn -> Disconnect-PSSession
Alias ebp -> Enable-PSBreakpoint
Alias echo -> Write-Output
Alias epal -> Export-Alias
Alias epcsv -> Export-Csv
Alias epsn -> Export-PSSession
Alias erase -> Remove-Item
Alias etsn -> Enter-PSSession
Alias exsn -> Exit-PSSession
Alias fc -> Format-Custom
Alias fhx -> Format-Hex 3.1.0.0 Microsoft.PowerShell.Utility
Alias fl -> Format-List
Alias foreach -> ForEach-Object
Alias ft -> Format-Table
Alias fw -> Format-Wide
Alias gal -> Get-Alias
Alias gbp -> Get-PSBreakpoint
Alias gc -> Get-Content
Alias gcb -> Get-Clipboard 3.1.0.0 Microsoft.PowerShell.Management
Alias gci -> Get-ChildItem
Alias gcm -> Get-Command
Alias gcs -> Get-PSCallStack
Alias gdr -> Get-PSDrive
Alias ghy -> Get-History
Alias gi -> Get-Item
Alias gin -> Get-ComputerInfo 3.1.0.0 Microsoft.PowerShell.Management
Alias gjb -> Get-Job
Alias gl -> Get-Location
Alias gm -> Get-Member
Alias gmo -> Get-Module
Alias gp -> Get-ItemProperty
Alias gps -> Get-Process
Alias gpv -> Get-ItemPropertyValue
Alias group -> Group-Object
Alias gsn -> Get-PSSession
Alias gsnp -> Get-PSSnapin
Alias gsv -> Get-Service
Alias gtz -> Get-TimeZone 3.1.0.0 Microsoft.PowerShell.Management
Alias gu -> Get-Unique
Alias gv -> Get-Variable
Alias gwmi -> Get-WmiObject
Alias h -> Get-History
Alias history -> Get-History
Alias icm -> Invoke-Command
Alias iex -> Invoke-Expression
Alias ihy -> Invoke-History
Alias ii -> Invoke-Item
Alias ipal -> Import-Alias
Alias ipcsv -> Import-Csv
Alias ipmo -> Import-Module
Alias ipsn -> Import-PSSession
Alias irm -> Invoke-RestMethod
Alias ise -> powershell_ise.exe
Alias iwmi -> Invoke-WmiMethod
Alias iwr -> Invoke-WebRequest
Alias kill -> Stop-Process
Alias lp -> Out-Printer
Alias ls -> Get-ChildItem
Alias man -> help
Alias md -> mkdir
Alias measure -> Measure-Object
Alias mi -> Move-Item
Alias mount -> New-PSDrive
Alias move -> Move-Item
Alias mp -> Move-ItemProperty
Alias mv -> Move-Item
Alias nal -> New-Alias
Alias ndr -> New-PSDrive
Alias ni -> New-Item
Alias nmo -> New-Module
Alias npssc -> New-PSSessionConfigurationFile
Alias nsn -> New-PSSession
Alias nv -> New-Variable
Alias ogv -> Out-GridView
Alias oh -> Out-Host
Alias popd -> Pop-Location
Alias ps -> Get-Process
Alias pushd -> Push-Location
Alias pwd -> Get-Location
Alias r -> Invoke-History
Alias rbp -> Remove-PSBreakpoint
Alias rcjb -> Receive-Job
Alias rcsn -> Receive-PSSession
Alias rd -> Remove-Item
Alias rdr -> Remove-PSDrive
Alias ren -> Rename-Item
Alias ri -> Remove-Item
Alias rjb -> Remove-Job
Alias rm -> Remove-Item
Alias rmdir -> Remove-Item
Alias rmo -> Remove-Module
Alias rni -> Rename-Item
Alias rnp -> Rename-ItemProperty
Alias rp -> Remove-ItemProperty
Alias rsn -> Remove-PSSession
Alias rsnp -> Remove-PSSnapin
Alias rujb -> Resume-Job
Alias rv -> Remove-Variable
Alias rvpa -> Resolve-Path
Alias rwmi -> Remove-WmiObject
Alias sajb -> Start-Job
Alias sal -> Set-Alias
Alias saps -> Start-Process
Alias sasv -> Start-Service
Alias sbp -> Set-PSBreakpoint
Alias sc -> Set-Content
Alias scb -> Set-Clipboard 3.1.0.0 Microsoft.PowerShell.Management
Alias select -> Select-Object
Alias set -> Set-Variable
Alias shcm -> Show-Command
Alias si -> Set-Item
Alias sl -> Set-Location
Alias sleep -> Start-Sleep
Alias sls -> Select-String
Alias sort -> Sort-Object
Alias sp -> Set-ItemProperty
Alias spjb -> Stop-Job
Alias spps -> Stop-Process
Alias spsv -> Stop-Service
Alias start -> Start-Process
Alias stz -> Set-TimeZone 3.1.0.0 Microsoft.PowerShell.Management
Alias sujb -> Suspend-Job
Alias sv -> Set-Variable
Alias swmi -> Set-WmiInstance
Alias tee -> Tee-Object
Alias trcm -> Trace-Command
Alias type -> Get-Content
Alias wget -> Invoke-WebRequest
Alias where -> Where-Object
Alias wjb -> Wait-Job
Alias write -> Write-Output

基础示例:

1
2
3
4
5
6
7
#1.获取别名的真实命令
PS > Get-Alias cat
# CommandType Name Version Source
# ----------- ---- ------- ------
# Alias cat -> Get-Content
PS > Get-Alias cls
# Alias cls -> Clear-Host

WeiyiGeek.

WeiyiGeek.


Set-Aliase 设置别名

描述:可以使用 Set-Alias cmdlet 创建自己的别名。

1
2
#1.PS设置别名样式
Set-Alias -Name gi -Value Get-Item

注意: PS内置别名无法被修改,否则会报错 Set-Alias :别名不可写入,因为别名 gi 为只读别名或常量,无法写入。


0x07 PS术语表

术语 定义
二进制模块 一个 PS 模块其根模块是一个二进制模块文件 (.dll)。 二进制模块可能包含或不包含模块清单。
通用参数 一个参数它由 PS 引擎添加到所有 cmdlet、高级函数和工作流中。
使用点获取来源 在 PS 中若要启动一个命令,可在该命令前键入一个点和一个空格。 采用点获取其来源的命令运行在当前范围而非新范围中。 命令创建的任何变量、别名、函数或驱动器都创建于当前范围,并在命令完成时提供给用户。
动态模块 一个仅存在于内存中的模块。 New-Module 和 Import-PSSession cmdlet 会创建动态模块。
动态参数 在某些情况下添加到 PS cmdlet、函数或脚本的一个参数。 Cmdlet、函数、提供程序和脚本可以添加动态参数。
格式设置文件 一个 PS XML 文件,它具有 .format.ps1xml 扩展名且定义 PS 如何基于对象的 .NET Framework 类型来显示对象。
全局会话状态 包含 PS 会话用户可访问的数据的会话状态。
主机 PS 引擎用于与用户进行通信的接口。 例如,主机指定 PS 和用户之间处理提示的方式。
主机应用程序 将 PS 引擎加载到其进程中并使用它执行操作的程序。
输入处理方法 Cmdlet 可用于处理其以输入形式所接收的记录的一种方法。 输入处理方法包括 BeginProcessing 方法、ProcessRecord 方法、EndProcessing 方法以及 StopProcessing 方法。
清单模块 一个 PS 模块,它具有一个清单且其 RootModule 项为空。
模块清单 一个 PS 数据文件 (.psd1),描述模块的内容并控制模块的处理方式。
模块会话状态 包含 PS 模块公用和专用数据的会话状态。 此会话状态中的私有数据不可供 PS 会话的用户使用。
非终止错误 不能阻止 PS 继续处理命令的错误。
名词 在 PS cmdlet 名称中连字符后面的单词。 名词描述了 cmdlet 在其上进行操作的资源。
参数集 可用于相同的命令中以执行特定操作的一组参数。
在 PS 中,将前一个命令的结果作为输入发送到管道中的下一个命令。
管道 一系列由管道运算符 (` `) (ASCII 124) 连接的命令。 每个管道运算符将前一个命令的结果作为输入发送到下一个命令。
PSSession 一种由用户创建、管理和关闭的 PS 会话类型。
根模块 在模块清单的 RootModule 项中指定的模块。
运行空间 在 PS 中,在其中执行管道中每个命令的操作环境。
脚本块 在 PS 编程语言中,可作为单个单元使用的语句或表达式的一个集合。 脚本块可以接受参数并返回值。
脚本模块 一个 PS 模块,其根模块是一个脚本模块文件 (.psm1);脚本模块可能包含或不包含模块清单。
脚本模块文件 一个包含 PS 脚本的文件。 该脚本定义脚本模块导出的成员。 脚本模块文件具有 .psm1 文件扩展名。
shell 用于将命令传递到操作系统的命令解释器。
开关参数 一个不带实参的形参。
终止错误 阻止 PS 处理命令的错误。
事务 一个工作的原子单元,必须将事务中的工作作为一个整体来完成;如果该事务的任何部分失败,那么整个事务都会失败。
类型文件 一个 PS XML 文件,它具有.ps1xml 扩展名且扩展 PS 中 Microsoft.NET Framework 类型的属性。
动作 在 PS cmdlet 名称中连字符前面的单词,它说明该 cmdlet 将执行的操作。
PS 为IT管理员提供全面控制以及实现系统管理任务自动化的一个命令行 Shell 和基于任务的脚本技术;
PS命令 导致操作被执行的管道中的元素。PS 命令可以在键盘上输入或以编程方式调用。
PS数据文件 具有 .psd1 文件扩展名的文本文件。 PS 将数据文件用于多种用途,例如存储模块清单数据和存储用于脚本国际化的已翻译的字符串。
PS驱动器 一个提供直接访问数据存储的虚拟驱动器。 它可以由 PS 提供程序定义或是在命令行中创建。 在命令行创建的驱动器是特定于会话的驱动器,并在会话关闭时丢失。
PS集成脚本环境 (ISE) 一个 PS 主机应用程序,使你能够运行命令并在友好、语法着色、符合 Unicode 的环境中编写、测试和调试脚本。
PS模块 一个独立的可重用单元,使你能够对 PS 代码进行分区、组织和抽象化。 模块可以包含 cmdlet、提供程序、函数、变量和其他可作为单个单元导入的资源类型。
PS提供程序 一个基于 Microsoft .NET Framework 的程序,用于使专用数据存储中的数据在 PS 中可用,以便你可以查看和管理它。
PS脚本 以 PS 语言编写的脚本。
PS脚本文件 具有 .ps1 扩展名且包含以 PS 语言编写的脚本的文件。
PS管理单元 定义一组可以添加到 PS 环境中的 cmdlet、提供程序和 Microsoft .NET Framework 的资源。
PS工作流程 工作流是一系列经过编程的连接步骤,会执行长期运行的任务,或是需要在多个设备或托管节点之间协调多个步骤。
PS工作流使IT专业人员和开发人员可以按工作流的形式创作多设备管理活动序列,或工作流中的单个任务。 PS 工作流使你能够调整 PS 脚本和 XAML 并将其作为工作流运行。