GVKun编程网logo

Windows Powershell Switch 语句(windows powershell基本语法及常用命令)

2

这篇文章主要围绕WindowsPowershellSwitch语句和windowspowershell基本语法及常用命令展开,旨在为您提供一份详细的参考资料。我们将全面介绍WindowsPowersh

这篇文章主要围绕Windows Powershell Switch 语句windows powershell基本语法及常用命令展开,旨在为您提供一份详细的参考资料。我们将全面介绍Windows Powershell Switch 语句的优缺点,解答windows powershell基本语法及常用命令的相关问题,同时也会为您带来AWS is updating minimum requirements for AWS Tools for PowerShell to Windows PowerShell 3.0 and ....、AzureDevOps Powershell 任务命令行参数未在 Powershell 脚本中正确呈现、Can''t locate Switch.pm in @INC (you may need to install the Switch module)、Java 中的 switch 于 C# 中的 switch 的区别的实用方法。

本文目录一览:

Windows Powershell Switch 语句(windows powershell基本语法及常用命令)

Windows Powershell Switch 语句(windows powershell基本语法及常用命令)

下面的例子将If-ElseIF-Else转换成Switch语句

复制代码 代码如下:

# 使用 IF-ElseIF-Else
If( $value -eq 1 )
{
    "Beijing"
}
Elseif( $value -eq 2)
{
    "Shanghai"
}
Elseif( $value -eq 3 )
{
    "Tianjin"
}
Else
{
    "Chongqing"
}
 
# 使用 Switch
switch($value)
{
    1 {"Beijing"}
    2 {"Shanghai"}
    3 {"Tianjin"}
    4 {"Chongqing"}
}

1

测试取值范围

使用 Switch 时缺省的比较运算符为 -eq 等于,你也可以自己定制比较条件,将条件放在花括号中,必须保证条件表达式的返回值为布尔类型”$True”或”$False”

复制代码 代码如下:

$value=18
# 使用 Switch 测试取值范围
switch($value)
{
    {$_ -lt 10} {"小于10"}
    10  {"等于10"}
    {$_  -gt 10} {"大于10"}
}
#输出
#大于10

没有匹配条件

在IF-Else语句中如果没有合适的条件匹配,可以在Else中进行处理,同样在Switch语句中如果case中没有条件匹配,可以使用关键字Default进行处理。
同样是上面的例子,稍加修改:

复制代码 代码如下:

$value=-7
# 使用 Switch 测试取值范围
switch($value)
{
    {($_ -lt 10) -and ( $_ -gt 0) }  {"小于10"}
    10  {"等于10"}
    {$_  -gt 10} {"大于10"}
    Default {"没有匹配条件"}
}
#Output:
#没有匹配条件

多个条件匹配

如果case中有多个条件匹配,那么每个匹配的条件都会进行处理,例如:

复制代码 代码如下:

$value=2
# 使用 Switch 测试取值范围
switch($value)
{
    {$_ -lt 5 }  { "小于5" }
    {$_ -gt 0 }   { "大于0" }
    {$_ -lt 100}{ "小于100"}
    Default {"没有匹配条件"}
}
 
#小于5
#大于0
#小于100

如果碰到匹配条件时只处理一次,可以使用Break关键字

复制代码 代码如下:

$value=99
# 使用 Switch 测试取值范围
switch($value)
{
    {$_ -lt 5 }   { "小于5"; break}
    {$_ -gt 0 }   { "大于0"; break}
    {$_ -lt 100}  { "小于100"; break}
    Default {"没有匹配条件"}
}
 
#大于0

比较字符串

之前的条件比较的都是数字,接下来比较字符串,默认的条件判断为-eq ,我们知道在Powershell中字符串的使用-eq比较大小写不敏感,所以才有下面的例子:

复制代码 代码如下:

$domain="www.jb51.net"
switch($domain)
{
    "Www.jB51.net" {"Ok 1"}
    "www.JB51.net" {"Ok 2" }
    "WWW.jb51.NET" {"Ok 3"}
}
Ok 1
Ok 2
Ok 3

大小写敏感

怎样在比较字符串时能够恢复为大小写敏感模式,Switch有一个-case 选项,一旦指定了这个选项,比较运算符就会从-eq 切换到 -ceq,即大小写敏感比较字符串:

复制代码 代码如下:

$domain="www.jb51.net"
#大小写敏感
switch -case ($domain)
{
    "Www.jB51.net" {"Ok 1"}
    "www.JB51.net" {"Ok 2" }
    "www.jb51.net" {"Ok 3"}
}
#Ok 3

使用通配符

字符串非常特殊,可是使用通配符,幸运的是Powershell也支持,果然Power啊。但是在Switch语句后要指定 -wildcard 选项

复制代码 代码如下:

$domain="www.jb51.net"
#使用通配符
switch -wildcard($domain)
{
    "*"     {"匹配''*''"}
    "*.net" {"匹配*.net" }
    "*.*.*" {"匹配*.*.*"}
}
匹配''*''
匹配*.net
匹配*.*.*

在字符串匹配中,比通配符功能更强大是正则表达式,Powershell的Switch语句也支持,真是太棒了。当然需要给Switch关键字指定选项-regex

复制代码 代码如下:

$mail="www@jb51.net"
#使用通配符
switch -regex ($mail)
{
    "^www"     {"www打头"}
    "net$"     {"net结尾" }
    "d{1,3}.d{1,3}.d{1,3}.d{1,3}" {"IP地址"}
}
 
#www打头
#net结尾

同时处理多个值

Switch支持对集合所有元素进行匹配,下面的例子使用Powershell Switch语句演示打印水仙花数:

复制代码 代码如下:

$value=100..999
switch($value)
{
{[Math]::Pow($_%10,3)+[Math]::Pow( [Math]::Truncate($_%100/10) ,3)+[Math]::Pow( [Math]::Truncate($_/100) , 3) -eq $_} {$_}
}
 
#153
#370
#371
#407

您可能感兴趣的文章:
  • Windows Powershell Switch 循环
  • window下homestead开发环境安装详细教程
  • 详细分析Windows Home Server是什么?
  • Windows Home Server OEM 正式版 下载地址
  • 解决windows10下"sqlplus / as sysdba"执行提示无权限问题
  • Windows下Apache应用环境塔建安全设置(目录权限设置)
  • windows10打开switchHost 提示无修改权限问题解决

AWS is updating minimum requirements for AWS Tools for PowerShell to Windows PowerShell 3.0 and ....

AWS is updating minimum requirements for AWS Tools for PowerShell to Windows PowerShell 3.0 and ....

https://amazonaws-china.com/blogs/developer/aws-is-updating-minimum-requirements-for-aws-tools-for-powershell-to-windows-powershell-3-0-and-net-framework-4-5/


On January 14th 2020 Microsoft ended extended support for Windows Server 2008 and Windows Server 2008 R2. The oldest supported Windows Server version, Windows Server 2012, comes with Windows PowerShell 3.0 and .NET Framework 4.5.

The legacy variant of AWS Tools for PowerShell (AWSPowerShell) is currently compatible with Windows PowerShell 2.0 and .NET Framework 3.5. Starting May 1st 2020, AWS will require Windows PowerShell 3.0+ and .NET Framework 4.5+ as prerequisite for all new releases of AWSPowerShell. The existing versions of AWSPowerShell that are compatible with Windows PowerShell 2 and .NET Framework 3.5 will continue to be available for download from PowerShell Gallery, but will not be updated or supported.

What do I need to do?

  • If you are using modular or bundled variants of AWS Tools for PowerShell (AWS.Tools or AWSPowerShell.NetCore) , you are not impacted. No action is required.
  • If you are running a legacy variant of AWS Tools for PowerShell (AWSPowerShell) on Windows Server 2012 or higher, that already come with Windows PowerShell 3.0, or higher, and .NET Framework 4.5, or higher, you are not impacted. No action is required.
  • If you are running a legacy variant of AWS Tools for PowerShell (AWSPowerShell) on Windows Server 2008 or Windows Server 2008 R2 with Windows PowerShell 3.0, or higher, and .NET Framework 4.5, or higher, installed, you are not impacted, but please follow Microsoft guidelines on upgrading to the latest OS version
  • If you are running a legacy variant of AWS Tools for PowerShell (AWSPowerShell) on Windows Server 2008 or Windows Server 2008 R2 with Windows PowerShell 2.0, or .NET Framework 4.0, or lower, please upgrade to Microsoft Windows 2012 or higher.
    • If you choose not to upgrade your OS version, please upgrade Windows PowerShell to version 3.0, or higher and .NET Framework to version 4.5, higher.
    • If you cannot upgrade from Windows PowerShell 2.0 and .NET Framework 3.5 without impacting other workloads, please install PowerShell Core 6.0 alongside the existing PowerShell 2.0 version and switch to the new PowerShell executable. Then follow these detailed instructions to install AWSPowerShell.NetCore on Windows.

AzureDevOps Powershell 任务命令行参数未在 Powershell 脚本中正确呈现

AzureDevOps Powershell 任务命令行参数未在 Powershell 脚本中正确呈现

如何解决AzureDevOps Powershell 任务命令行参数未在 Powershell 脚本中正确呈现

我有一个 AzureDevops Powershell 任务,它将从 keyvault 读取的值作为参数传递给脚本。即使在 DevOps 任务中使用双引号或单引号将变量括起来,脚本中的值也不会显示正确。

我还需要做什么才能将这些值正确传递给脚本?

有一个 older similar question,答案是双引号任务中的参数,我已经这样做了,但无济于事。

示例 Powershell 任务:

  1. ScriptArguments: -connectionString "$(ConnString)" -password "$(ConnStringPassword)"

存储在 keyvault 中的示例值:

  1. ConnString: Server=tcp:test-sqldb.database.windows.net,1433;Initial Catalog=TestDb;Persist Security Info=False;
  2. ConnStringPassword: Pa$$w0rd

示例脚本:

  1. param (
  2. [string]$connectionString,[string]$password
  3. )
  4. Write-Host "connectionString: $connectionString"
  5. Write-Host "password: $password"

管道执行的示例输出:

  1. connectionString: ***
  2. password: Paw0rd

如果我按照下面@Thomas 的建议在管道任务中使用单引号:

示例 Powershell 任务:

  1. ScriptArguments: -connectionString ''$(ConnString)'' -password ''$(ConnStringPassword)''

流水线执行的示例输出:

  1. connectionString: ***
  2. password: ***

解决方法

@ShaykiAbramczyk 是正确的,秘密是不可见的。然而,这些值在 Powershell 脚本中得到了正确利用。我通过发布测试输出文件并查看 KeyVault 值在输出文件中来验证这一点。以下参考资料让我想到了发布以查看值,而不是尝试回显或将它们写入控制台。

Use secrets from Azure Key Vault in Azure Pipelines

Can''t locate Switch.pm in @INC (you may need to install the Switch module)

Can''t locate Switch.pm in @INC (you may need to install the Switch module)

android 编译提示 "Can''t locate Switch.pm in @INC (you may need to install the Switch module)" 错误

Can''t locate Switch.pm in @INC (you may need to install the Switch module) (@INC contains: /home/xxx/project/vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MT6761/../Spreadsheet /home/xxx/project/vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MT6761/../ /home/xxx/project/vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MT6761 /home/xxx/project/vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MT6761/../common /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at /home/xxx/project/vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MT6761/../common/emigen_v1.pm line 1348.
BEGIN failed--compilation aborted at /home/xxx/project/vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MT6761/../common/emigen_v1.pm line 1348.
Compilation failed in require at /home/xxx/project/vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MT6761/emigen.pl line 104.
BEGIN failed--compilation aborted at /home/xxx/project/vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MT6761/emigen.pl line 104.
Can''t locate Switch.pm in @INC (you may need to install the Switch module) (@INC contains: /home/xxx/project/vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MT6761/../Spreadsheet /home/xxx/project/vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MT6761/../ /home/xxx/project/vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MT6761 /home/xxx/project/vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MT6761/../common /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at /home/xxx/project/vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MT6761/../common/emigen_v1.pm line 1348.
BEGIN failed--compilation aborted at /home/xxx/project/vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MT6761/../common/emigen_v1.pm line 1348.
Compilation failed in require at /home/xxx/project/vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MT6761/emigen.pl line 104.
BEGIN failed--compilation aborted at /home/xxx/project/vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MT6761/emigen.pl line 104.
make: *** [tools/emigen/emigen.mk:48: /home/xxx/project/out/target/product/k61v1_64_bsp_pax/obj/PRELOADER_OBJ/inc/custom_emi.h] Error 2
make: *** Waiting for unfinished jobs....
make: *** [tools/emigen/emigen.mk:52: /home/xxx/project/out/target/product/k61v1_64_bsp_pax/obj/PRELOADER_OBJ/MTK_Loader_Info.tag] Error 2
unable to load Private Key

解决办法:

sudo apt-get install libswitch-perl

Java 中的 switch 于 C# 中的 switch 的区别

Java 中的 switch 于 C# 中的 switch 的区别

一、java 当中的 switch 与 C# 相比有以下区别

 注:在 java 中 switch 后的表达式的类型只能为以下几种:byte、short、char、int(在 Java1.6 中是这样),
   在 java1.7 后支持了对 string 的判断
   
   还有一点要注意的是:在 java 中如果 switch 的 case 语句中少写了 break; 这个关键字,在编译的时候并没有报错
             但是在执行的时候会一直执行所有 case 条件下的语句并不是去判断,所以会一直执行直到遇到 break 关键字跳出或者一直执行到 defaut 语句。
             还有就是如果在 switch 表达的结果在 case 中没话 swithc 就会从 default 执行,这是与 C# 不同的地方。

public class TestSwitch{
    public static void main(String args[]){
        char c = ''a'';        //char类型字符
        switch(c){
            default:
                System.out.println("打印默认值");
                break;
            case ''a'':
                System.out.println("a");
                break;
            case ''b'':
                System.out.println(''b'');
                break;
            case ''c'':
                System.out.println(''c'');
                break;
            case ''d'':
                System.out.println("d");
                break;
            
        }
    }
}

 

我们今天的关于Windows Powershell Switch 语句windows powershell基本语法及常用命令的分享已经告一段落,感谢您的关注,如果您想了解更多关于AWS is updating minimum requirements for AWS Tools for PowerShell to Windows PowerShell 3.0 and ....、AzureDevOps Powershell 任务命令行参数未在 Powershell 脚本中正确呈现、Can''t locate Switch.pm in @INC (you may need to install the Switch module)、Java 中的 switch 于 C# 中的 switch 的区别的相关信息,请在本站查询。

本文标签: