谁写脚本的经验再丰富,可能也会有败走麦城的时候。比如写出这样一个test.ps1

param

(

[bool]$Confirm,

[bool]$Force

)

if($Confirm){

'Confirmed'

}

if($Force){

'Forced'

}

调用时遇到点小插曲:

PS> .\test.ps1

PS> .\test.ps1 -Confirm $true -Force

C:\Documents\test.ps1 : 缺少参数“Force”的某个参数。请指定一个类型为“System.Boolean”的参数,然后再试一次

所在位置 行:1 字符: 27

+ .\test.ps1 -Confirm $true -Force

+ ~~~~~~

+ CategoryInfo : InvalidArgument: (:) [test.ps1],ParameterBindingException

+ FullyQualifiedErrorId : MissingArgument,test.ps1

PS> .\test.ps1 -Confirm $true -Force $true

Confirmed

Forced

最终达到了期望的结果。我们再换一种调用方式:

PS> powershell.exe .\test.ps1 -Confirm $true -Force $true

C:\test.ps1 : 无法处理对参数“Confirm”的参数转换。无法将值“System.String”转换为类型“System.Boo

lean”。布尔参数仅接受布尔值和数字,例如 $True、$False、1 或 0。

所在位置 行:1 字符: 21

+ .\test.ps1 -Confirm True -Force True

+ ~~~~

+ CategoryInfo : InvalidData: (:) [test.ps1],ParameterBindingArgumentTransformationException

+ FullyQualifiedErrorId : ParameterArgumentTransformationError,test.ps1

上面这样调用的目的,在于脱离PowerShell控制台的上下文,直接在外部应用程序中调用PowerShell.exe,比如你写了一个winform程序,在winform程序中调用PowerShell,千万不要告诉我C#本身可以执行Powershell脚本,因为那样需要引用PowerShell的程序集,而2.0,3.0,4.0的这几个版本很难用一个dll搞定。

上面这样调用错误的原因,$true最终被解释成true字符串,这个字符串默认不能自动转换成布尔类型。其实错误信息给出了提示可以使用1,0:

PS> powershell.exe .\test.ps1 -Confirm 1 -Force 1

Confirmed

Forced

上面这个例子能调用成功,是因为我的上下文还在PowerShell 中,“1”默认被转换成了整数“1”,而整数可以被布尔类型强制类型转换。接下来我要完全脱离PowerShell上下文,在cmd中运行:

c:\> powershell.exe .\test.ps1 -Confirm 1 -Force 1

Confirmed

Forced

结论:跨进程给PowerShell脚本传递布尔类型是,如果遇到解析错误,可以使用0和1代替。

其实更高级更方便的应当是使用switch:

param

(

[switch]$Confirm,

[switch]$Force

)

×用微信扫描并分享

暂时没有相关文章。

boolean linux shell_给PowerShell脚本传递一个布尔值相关推荐

  1. linux向脚本传递参数,Linux 使用位置变量向脚本传递参数

    参考:<Linux命令 / 编辑器与脚本编程> ################################################# 脚本文件在执行时,也可以像命令和应用程序 ...

  2. Linux系统通过Shell脚本实现一个全方面的系统性能分析系统

    Linux系统通过Shell脚本实现一个全方面的系统性能分析系统 文章目录 Linux系统通过Shell脚本实现一个全方面的系统性能分析系统 1.利用select循环实现系统工具箱 2.命令技巧 3. ...

  3. java后台传一个对象到前台_前台判断对象中的一个布尔值_springMVC面试题

    1:springMVC工作原理 springMVC架构.png [用户发送请求到前端控制器dispatcherservlet,前端控制器接收到请求之后调用处理器映射器,根据请求url找到具体的处理器, ...

  4. 给定一个只由 0、1、、|和^五种字符组成的字符串express,再给定一个布尔值 desired。返回express能有多少种组合方式,可以达到desired的结果。

    问题描述: 给定一个只由 0(假).1(真).&(逻辑与).|(逻辑或)和^(异或)五种字符组成的字符串express,再给定一个布尔值 desired.返回express能有多少种组合方式, ...

  5. java后台传一个对象到前台_前台判断对象中的一个布尔值_前后台分离的项目中,如何优雅的传输boolean类型的参数...

    前言:需求 这是一个Spring + Angular前后台分离的项目,目前有一个查看作业列表的功能,并且已经设置了分页和几个查询参数,如图. 现在需要增加一个已评阅和未评阅的查询功能. Work实体的 ...

  6. java返回一个布尔值_关于java:返回布尔值的方法

    好的,所以我的问题是关于布尔值的回报. 对于我的Comp Sci作业,我必须使用方法制作课程注册程序,其中之一是添加课程方法. 基本上,您在目录中搜索该班级,如果匹配,则将其添加到学生时间表中,并返回 ...

  7. linux shell java 参数_java调用linux中的shell脚本传递参数并返回执行结果

    [刚接触 linux下的开发,最近遇到java调用shell脚本的问题,找到一个比较适合菜鸟级的方法,转述如下: 在需要运行的SHELL脚本第一行添加 #!/bin/sh然后在终端运行  chmod ...

  8. java远程调用linux的命令或者脚本

    为什么80%的码农都做不了架构师?>>>    转载请出自出处: http://eksliang.iteye.com/blog/2105862 Java通过SSH2协议执行远程She ...

  9. Linux 中启用 Shell 脚本的调试模式

    shell 脚本调试系列 Linux 中启用 Shell 脚本的调试模式 在 Shell 脚本中执行语法检查调试模式 在 Shell 脚本中跟踪调试命令的执行 概述 脚本是存储在一个文件的一系列命令. ...

最新文章

  1. 对示波器测量正弦波幅值和相位仿真实验
  2. php隐藏webshell_【web端权限维持】利用ADS隐藏webshell
  3. java中Logger.getLogger(Test.class)
  4. Boost:bimap双图信息的测试程序
  5. python套用word模板_如何使用Python批量创建Word模板
  6. 华为Mate 30系列后摄相机模组曝光:圆形三摄各有不同
  7. 早晨有好多学生在买早餐吃,这样好吗?家长不给孩子做饭吗?
  8. python怎么下载教程-Python爬虫文件下载图文教程
  9. hadoop安装单机配置
  10. php split to array,Split php varibale with JS into array
  11. HDU 1754 I Hate It 线段树RMQ
  12. 传输层协议(3):TCP 连接(中)
  13. Java 猜单词游戏
  14. python核心编程第二版第六章答案
  15. Spring 事务和事务传播机制
  16. 分类与聚类的区别以及聚类的方法分类
  17. 劲爆!群晖docker视频
  18. 用Python爬取文章,并转PDF格式电子书
  19. 网络渗透测试实验二(网络扫描与网络侦察)
  20. 英语一大作文模板如何自己制作?

热门文章

  1. DNS协议及客户端实现
  2. android 睡眠与唤醒I
  3. oracle 视图权限 oracle 创建视图权限不足( ORA-01031: 权限不足)
  4. 仓库文件SVN总结-java教程
  5. 银行软件测试工作量分析和评估方法(转)
  6. pytorch扩展——如何自定义前向和后向传播
  7. 洛谷P3048 [USACO12FEB]牛的IDCow IDs
  8. 外键列到底要建在哪里?
  9. java求两个数组的并集、交集、差集
  10. DIP(依赖倒置原则),IoC(控制反转),DI(依赖注入)复习总结