首页 > 系统相关 >PowerShell 使用指南

PowerShell 使用指南

时间:2024-03-12 09:47:04浏览次数:29  
标签:PS Windows 环境变量 echo env 使用指南 PowerShell

PowerShell 使用指南

Started: 2024.03.12 09:00:00
Update: 2024-03-12 09:36:27

0. Purpose

在 Win11 中,默认的终端已经是 PowerShell, 包括 VSCode 里的默认终端, 这一方面改进了 cmd.exe 表达力不足的问题, 另一方面要求程序员们要学习一点 PowerShell 语法, 之前的 bat 语法虽然能继续通过 .cmd/.bat 脚本文件中使用, 但在执行单条命令时还是不如 PowerShell 命令来的直接。

1. 获取程序执行结束时的返回值

在 Linux 下用 echo $?, 得到具体的数字。 在 powershell 下,echo $? 输出 True/False 不直观,有两种方法得到具体数值:

1). echo $LASTEXITCODE

2). 创建进程,获取和输出进程对象的 ExitCode 属性:
执行方法:

$process = Start-Process -FilePath "你的可执行文件路径" -ArgumentList "参数列表(如果有)" -NoNewWindow -PassThru -Wait

# 获取 main() 函数的返回值
$exitCode = $process.ExitCode

# 输出返回值
Write-Output "程序退出代码: $exitCode"

样例输出:

PS D:\> $process = Start-Process -FilePath "./a.exe"
PS D:\> $exitCode = $process.ExitCode
PS D:\> Write-Output "程序退出代码: $exitCode"
程序退出代码:
PS D:\> $process = Start-Process -FilePath "./a.exe" -NoNewWindow -PassThru -Wait
a - b = 255
PS D:\> $exitCode = $process.ExitCode
PS D:\> Write-Output "程序退出代码: $exitCode"""""""""

2. 获取程序执行耗时

在 Linux 下可以用 time ./testbed。 PowerShell 不支持 time 命令, 提供了如下三种方式来获取耗时:

  1. 获取程序执行耗时, 但屏蔽了命令本身的输出:

测量 ls 命令执行的耗时(只显示耗时,ls的输出会被隐藏)

Measure-Command { ls }

2)获取程序执行耗时, 同时保持命令本身的输出:

测量 ls 命令执行的耗时, 并保持ls自身的输出

Measure-Command { ls | Out-Default }
  1. 获取程序的耗时, 并且以毫秒为单位进行输出:
    Measure-Command 会返回一个 TimeSpan 对象,该对象包含了执行所需的总时间, 因此可以写的更复杂一些:
# 使用 Measure-Command 测量命令执行时间
$result = Measure-Command {
    # 在这里放置你要执行的命令或脚本
    Start-Process "你的程序路径" -ArgumentList "参数列表(如果有)" -NoNewWindow -Wait
}

# 输出程序运行耗时
Write-Output "程序运行耗时: $($result.TotalMilliseconds) 毫秒"

3. 查看和修改环境变量

3.1 查看所有环境变量

Linux 下使用 env 显示所有环境变量。 PowerShell 使用

Get-ChildItem Env:

获取所有环境变量, 不过像 PATH 这样的环境变量通常由于内容太多,显示不全(只显示单行,结尾截断了)。

e.g.

PS D:\github\xxxx> Get-ChildItem Env:

Name                           Value
----                           -----
ALLUSERSPROFILE                C:\ProgramData
ANDROID_NDK                    D:/soft/android-ndk/r21e
APPDATA                        C:\Users\aczz\AppData\Roaming
ChocolateyInstall              C:\ProgramData\chocolatey
CMAKE_EXPORT_COMPILE_COMMANDS  1
hexagon-sdk_env_root           D:\soft\Qualcomm\HexagonSDK\5.5.0.1
HOMEDRIVE                      C:
HOMEPATH                       \Users\aczz
LOCALAPPDATA                   C:\Users\aczz\AppData\Local
LUA_DEV                        d:\soft\Lua\5.1
LUA_PATH                       ;;d:\soft\Lua\5.1\lua\?.luac
NO_ASAN_SAVE_DUMPS             MyAsanCrash.dmp
NUMBER_OF_PROCESSORS           12
OS                             Windows_NT
Path                           C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPo...
PATHEXT                        .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.wlua;.lexe;.CPL
POWERSHELL_TELEMETRY_OPTOUT    1
UseMultiToolTask               true
USERPROFILE                    C:\Users\aczz
VCPKG_DISABLE_METRICS          1
VCPKG_ROOT                     D:\github\vcpkg

3.2 打印某个环境变量

Linux 下使用 echo $PATH 的方式打印 PATH 环境变量的值, 使用 echo $ANDROID_NDK 打印环境变量 ANDROID_NDK 的值。

PowerShell 下也有 echo 命令, 但是环境变量要用 $env:PATH$env:ANDROID_NDK 的形式来获取, 即:

PS D:\> echo $env:PATH
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Windows\System32\OpenSSH;
PS D:\> echo $env:ANDROID_NDK
D:/soft/android-ndk/r21e

3.3 临时修改某个环境变量

Linux 下使用 export PATH=$PATH:/usr/local/cmake-3.29.0/bin 这样的用法, PowerShell 不支持 export 命令。 直接给环境变量赋值即可, 变量可以是新的,也可以是已经存在的:

$env:MY_VAR = "somevalue"

e.g.

PS D:\> $env:MY_VAR = "somevalue"
PS D:\> echo $env:MY_VAR
somevalue
PS D:\> $env:MY_VAR = "somevalue2"
PS D:\> echo $env:MY_VAR
somevalue2

4. 重定向

Linux 下使用 ./testbed > log.txt 2>&1 来重定向标准输出和错误输出。 PowerShell 下仍然可以用 2>&1.

标签:PS,Windows,环境变量,echo,env,使用指南,PowerShell
From: https://www.cnblogs.com/zjutzz/p/18067631

相关文章

  • 小白一眼就能懂的JSON简介与基本使用指南
    前言JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,具有易读易写的特点,广泛应用于Web开发和数据传输领域。本文将介绍JSON的基本概念、语法结构以及常见的使用方法,帮助读者快速上手JSON数据格式。JSON简介JSON起源于JavaScript语言,但已成为一种独立于编程语言的数......
  • Markdown+Typora使用指南(测试博客)
    Markdown+Typora使用指南(测试博客)这个是我刚学Markdown时参考B站上一个up主(忘记是哪个了)的视频记录的笔记,在这里仅作测试博客园博客使用,后期会删除。目录Markdown+Typora使用指南(测试博客)0.写Markdowm用半角标点1.标题["#"+空格前置]三级标题四级标题五级标题六级标题2.强......
  • [转]mkcert 使用指南:如何快速创建自签名 SSL 证书
    原文地址:mkcert使用指南:如何快速创建自签名SSL证书-知乎我们平时在本地开发时,有时会要求通过HTTPS请求来访问。一个通用的做法是用OpenSSL生成自签证书,然后对Web服务进行配置。但OpenSSL的命令比较繁琐,参数也比较复杂,用起来不够方便。于是我找到了一个替代方案:mkce......
  • 分组聚合不再难:Pandas groupby使用指南
    处理大量数据时,经常需要对数据进行分组和汇总,groupby为我们提供了一种简洁、高效的方式来实现这些操作,从而简化了数据分析的流程。1.分组聚合是什么分组是指根据一个或多个列的值将数据分成多个组,每个组包含具有相同键值(这里的键值即用来分组的列值)的数据行。聚合或者汇总则是......
  • 在PowerShell中下载文件是一项常见的任务,可以通过多种方法完成。下面我将介绍使用Invo
    在PowerShell中下载文件是一项常见的任务,可以通过多种方法完成。下面我将介绍使用Invoke-WebRequest、New-Object和Start-BitsTransfer命令来下载文件的方法。使用Invoke-WebRequestInvoke-WebRequest是一个非常强大的命令,用于向网页发送HTTP和HTTPS请求。你可以使用它来下载文......
  • powershell保护明文密码
    winrm脚本能运行了,就想着明文密码怎么也隐藏一下,网上搜了一圈,还是sparkdev的简单明了:https://www.cnblogs.com/sparkdev/p/7258507.html试着走一下,txt方式有效,高级的txt+key却报错“ConvertTo-SecureString:输入数据不是完整的块”,一时也不知怎么解决,只得记下日后反刍。$Pass......
  • PowerShell 命令来修改打印机属性中端口的配置 PowerShell 修改注册表中打印机属性端
    PowerShell命令来修改打印机属性中端口的配置,可以通过以下步骤来实现:首先,使用 Get-PrinterPort 命令获取当前打印机端口的信息,找到需要修改的端口名称。然后,使用 Set-PrinterPort 命令来修改端口的配置,去掉“启用了SNMP状态”选项前面的“√”。下面是一个示例代码,假设......
  • PowerShell 中,您可以通过远程连接来管理其他计算机。以下是一些常见的用于管理远程主
    PowerShell中,您可以通过远程连接来管理其他计算机。以下是一些常见的用于管理远程主机的PowerShell命令:建立远程会话:powershellCopyCodeEnter-PSSession-ComputerName"RemoteComputerName"这个命令将在本地计算机和远程计算机之间建立一个交互式的PowerShell会话。......
  • PowerShell 中配置远程主机,您需要确保已经启用了远程管理功能,并且具有适当的权限。以
    PowerShell中配置远程主机,您需要确保已经启用了远程管理功能,并且具有适当的权限。以下是一些常见的远程主机配置步骤:启用远程管理:在远程主机上,您需要打开PowerShell并以管理员身份运行,然后运行以下命令来启用远程管理:powershellCopyCodeEnable-PSRemoting-Force这将启......
  • 本地主机上配置 PowerShell,您可以执行以下一些常见的配置步骤
    在本地主机上配置PowerShell,您可以执行以下一些常见的配置步骤:检查执行策略:在PowerShell中,执行策略用于控制脚本的执行。可以通过运行以下命令来检查当前的执行策略:powershellCopyCodeGet-ExecutionPolicy如果策略不是RemoteSigned或Unrestricted,您可以使用以下命令......