powershell之变量、常量和数组

本文介绍了Windows PowerShell,一种基于.NET Framework的命令行工具,重点讲解了如何启动PowerShell、定义和使用变量、常量以及数组。变量以美元符开始,环境变量存储在$env:中,可通过Set-Variable创建常量,数组是有序元素序列,可以通过不同方式定义。此外,还提到了变量的作用域和强类型的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

POWERSHELL

  • 什么是powershell

Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。 它引入了许多非常有用的新概念,从而进一步扩展了您在 Windows 命令提示符和 Windows Script Host 环境中获得的知识和创建的脚本。

Windows PowerShell v3将伴随着MicrosoftHyper-V3.0和Windows Server 2012发布。PowerShell v3是一个Windows任务自动化的框架,它由一个命令行shell和内置在这个.NET框架上的编程语言组成。

PowerShell v3采用新的cmdlet让管理员能够更深入到系统进程中,这些进程可以制作成可执行的文件或脚本(script)。一条cmdlet是一条轻量命令,Windows PowerShell运行时间在自动化脚本的环境里调用它。Cmdlet包括显示当前目录的Get-Location,访问文件内容的Get-Content和结束运行进程的Stop-Process。

PowerShell v3在Windows Server 8中装载了Windows Management Framework 3.0。PowerShell运行时间也能嵌入到其它应用。

  • 如和启动powershell

启动方法有如下几种:

a) 直接开始菜单 -> 所有程序 -> Windows PowerShell -> Windows PowerShell(不同系统可能路径不一样)。启动后效果如下:在这里插入图片描述
b) 开始菜单 -> 运行(run) -> 输入”PowerShell”。启动成功后和上图一样。

c) 命令提示符(Command Prompt) -> PowerShell。启动后效果如下:在这里插入图片描述
启动成功后就可以在里面输入要执行的命令了,这就是PowerShell的交互界面。

  • 变量

变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据。脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell变量也遵循这个规则。

在Bash shell中,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。
这意味着,Bash shell在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串,这一点和大部分的编程语言不同。例如在C语言或者C++中,变量分为整数、小数、字符串、布尔等多种类型。

当然,如果有必要,你也可以使用Shell declare关键字显式定义变量的类型,但在一般情况下没有这个需求,,Shell开发者在编写代码时自行注意值的类型即可。

  1. 变量命名
    powershell中变量以美元符”$”开始,其余字符可以是字母、下划线、数字任意字符,不区分大小。

  2. 变量赋值与交换
    在这里插入图片描述

  3. 查看变量

Powershell把变量的相关信息存放在variable:的驱动中。查看所有定义的变量的命令“ls variable:”,查询以a开头的变量如下:

在这里插入图片描述

  1. 环境变量

$env:中的环境变量只是电脑环境变量的一个副本,除了用.NET方法更新环境变量,其他的更改在下一次重新打开时,会恢复如初。

通过$env:提示powershell忽略基本的variable:驱动器,先去环境变量env:驱动器中寻找变量。

通过“ls env:”可以查询所有的环境变量,通过“$env:name”就可以访问指定name的环境变量了。
在这里插入图片描述
环境变量的创建和删除:
在这里插入图片描述

  1. 变量的作用域

$global

全局变量,在所有的作用域有效。

$script

脚本变量,在脚本内部有效。

$private

私有变量,在当前作用域有效。

$local

默认变量,在当前作用域有效,其它作用域对它只有可读权限。
在这里插入图片描述

  1. 强类型

给变量指定类型。
在这里插入图片描述
在这里插入图片描述

  • 常量

PowerShell的常量与变量有两处不同的地方:常量的值永远不会变,常量不能被删除。
使用常量之前,必须通过Set-Variable这个cmdlet来创建常量,并且使用一些参数来指定它等于某个常量。

注意:当使用常量的时候,必须用 开 头 , 就 跟 使 用 普 通 变 量 一 样 。 然 而 , 当 使 用 S e t − V a r i a b l e 定 义 常 量 时 , 不 能 用 开头,就跟使用普通变量一样。然而,当使用Set-Variable定义常量时,不能用 使使SetVariable符号开头。
$aryComputers = “loopback”, “localhost”

Set-Variable -name intDriveType -value 3 -option constant

foreach ($strComputer in $aryComputers)

{"Hard drives on: " + $strComputer

Get-WmiObject -class win32_logicaldisk -computername $strComputer|

Where {$_.drivetype -eq $intDriveType}}

  • 数组

定义:数组即有序的元素序列,把相同类型的若干元素按有序的形式组织起来的一种形式。数组长度不可扩大,其大小由其组成元素决定。

  1. $array_name=value0,value01,value02 #定义数组,用逗号分开
    $array_name=value0…valuen #连续数字用…
    在这里插入图片描述
  2. $array_name=@() #定义空数组
    在这里插入图片描述
  • 强类型

通过下列的提示符,可以为一个变量强制指定类型。

AliasType
[int]32-bit signed integer
[long]64-bit signed integer
[string]Fixed-length string of Unicode characters
[char]A Unicode 16-bit character
[bool]True/false value
[byte]An 8-bit unsigned integer
[double]Double-precision 64-bit floating point number
[decimal]An 128-bit decimal value
[single]Single-precision 32-bit floating point number
[array]An array of values
[xml]Xml objects
[hashtable]A hashtable object (similar to a dictionary object)
``` # 定义常量PowerShell变量替换环境变量) $SERVER = "223.5.5.5" $WIRELESS_IF = "WLAN" $WIRED_IF = "以太网" # 初始化跃点数值 $global:WL_metric_v4 = 9999 $global:WL_metric_v6 = 9999 $global:W_metric_v4 = 9999 $global:W_metric_v6 = 9999 # 设置有线网络优先级(IPv4/IPv6) netsh interface ipv4 set interface "$WIRED_IF" metric=30 netsh interface ipv6 set interface "$WIRED_IF" metric=30 # 使用Test-Connection替代ping检测 if (Test-Connection -ComputerName $SERVER -Count 3 -Quiet) { # 当服务器可达时设置无线高跃点 netsh interface ipv4 set interface "$WIRELESS_IF" metric=50 netsh interface ipv6 set interface "$WIRELESS_IF" metric=50 } else { # 获取当前跃点数值(使用PowerShell原生命令) try { $interface0 = Get-NetIPInterface -InterfaceAlias $WIRED_IF -AddressFamily IPv4 -ErrorAction Stop $interface1 = Get-NetIPInterface -InterfaceAlias $WIRED_IF -AddressFamily IPv6 -ErrorAction Stop $global:W_metric_v4 = $interface0.InterfaceMetric $global:W_metric_v6 = $interface1.InterfaceMetric $interface0 = Get-NetIPInterface -InterfaceAlias $WIRELESS_IF -AddressFamily IPv4 -ErrorAction Stop $interface1 = Get-NetIPInterface -InterfaceAlias $WIRELESS_IF -AddressFamily IPv6 -ErrorAction Stop $global:WL_metric_v4 = $interface0.InterfaceMetric $global:WL_metric_v6 = $interface1.InterfaceMetric } catch { Write-Warning "无法获取网络接口信息:$_" exit 1 } # 调整无线跃点逻辑 if ($global:WL_metric_v4 -lt $global:W_metric_v4) { netsh interface ipv4 set interface "$WIRELESS_IF" metric=50 netsh interface ipv6 set interface "$WIRELESS_IF" metric=50 } else { netsh interface ipv4 set interface "$WIRELESS_IF" metric=20 netsh interface ipv6 set interface "$WIRELESS_IF" metric=20 } }```修改这个powershell的脚本代码,使得这个脚本运行中出错后可以看见错误信息并且暂停
最新发布
03-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值