欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Powershell实现编写和运行脚本

程序员文章站 2022-03-14 08:11:18
一个powershell仅仅是一个包含powershell代码的文本文件。如果这个文本文件执行,powershell解释器会逐行解释并执行它的的语句。powershell脚...

一个powershell仅仅是一个包含powershell代码的文本文件。如果这个文本文件执行,powershell解释器会逐行解释并执行它的的语句。powershell脚本非常像以前cmd控制台上的批处理文件。您可以通过非常简单的文本编辑工具创建powershell脚本。

通过重定向创建脚本

如果您的脚本不是很长,您甚至可以直接在控制台中要执行的语句重定向给一个脚本文件。

ps e:> '"hello,powershell script"' > myscript.ps1
ps e:> .\myscript.ps1
hello,powershell script

这样有个缺点,就是您的代码必须放在闭合的引号中。这样的书写方式一旦在脚本内部也有引号时,是一件很痛苦的事。甚至您还可能希望在脚本中换行。下面的here-strings例子不错,也就是将脚本文件通过@‘ '@闭合起来。

ps e:> @'
>> get-date
>> $env:commonprogramfiles
>> #script end
>> "files count"
>> (ls).count
>> #script really end
>>
>> '@ > myscript.ps1
>>
ps e:> .myscript.ps1

2012年4月27日 8:15:10
c:\program files\common files
files count
20

here-string以 @‘开头,以'@结束.任何文本都可以存放在里面,哪怕是一些特殊字符,空号,白空格。但是如果您不小心将单引号写成了双引号,powershell将会把里面的变量进行解析。

通过编辑器创建脚本

其实非常方便的还是最地道的文版编辑器notepad,您可以直接在powershell控制台中打开notepad

ps e:> notepad.exe .\myscript.ps1
ps e:> notepad.exe

编辑完记得保存即可。

运行powershell脚本

当您的脚本编写成功后您可能第一次会像下面的方式运行它,也就是只输入脚本的文件名,会报错。

ps e:> myscript.ps1

无法将“myscript.ps1”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括
路径,请确保路径正确,然后重试。
所在位置 行:1 字符: 13
+ myscript.ps1 < <<<
+ categoryinfo : objectnotfound: (myscript.ps1:string) [], commandnotfoundexception
+ fullyqualifiederrorid : commandnotfoundexception

suggestion [3,general]: 未找到命令 myscript.ps1,但它确实存在于当前位置。windows powershell 默认情况
下不从当前位置加载命令。如果信任此命令,请改为键入 ".myscript.ps1"。有关更多详细信息,请参阅 "get-h
elp about_command_precedence"。
除非您使用相对路径,或者绝对路径

ps e:> .\myscript.ps1

2012年4月27日 8:33:03
c:\program files\common files
files count
20

ps e:> e:myscript.ps1

2012年4月27日 8:33:11
c:\program files\common files
files count
20

执行策略限制

powershell一般初始化情况下都会禁止脚本执行。脚本能否执行取决于powershell的执行策略。

ps e:> .\myscript.ps1

无法加载文件 e:myscript.ps1,因为在此系统中禁止执行脚本。有关详细信息,请参阅 "get-help about_sign
ing"。
所在位置 行:1 字符: 15
+ .myscript.ps1 < <<<
+ categoryinfo : notspecified: (:) [], pssecurityexception
+ fullyqualifiederrorid : runtimeexception
只有管理员才有权限更改这个策略。非管理员会报错。

查看脚本执行策略,可以通过:

ps e:> get-executionpolicy

更改脚本执行策略,可以通过

ps e:> get-executionpolicy
restricted
ps e:> set-executionpolicy unrestricted

执行策略更改

执行策略可以防止您执行不信任的脚本。更改执行策略可能会使您面临 about_execution_policies
帮助主题中所述的安全风险。是否要更改执行策略?
[y] 是(y) [n] 否(n) [s] 挂起(s) [?] 帮助 (默认值为“y”): y
脚本执行策略类型为:microsoft.powershell.executionpolicy
查看所有支持的执行策略:

ps e:> [system.enum]::getnames([microsoft.powershell.executionpolicy])
unrestricted
remotesigned
allsigned
restricted
default
bypass
undefined
unrestricted:权限最高,可以不受限制执行任何脚本。
default:为powershell默认的策略:restricted,不允许任何脚本执行。
allsigned:所有脚本都必须经过签名才能在运行。
remotesigned:本地脚本无限制,但是对来自网络的脚本必须经过签名。

关于powershell脚本的签名在后续会谈到。

像命令一样执行脚本

怎样像执行一个命令一样执行一个脚本,不用输入脚本的相对路径或者绝对路径,甚至*.ps1扩展名。
那就将脚本的执行语句保存为别名吧:

ps e:> set-alias invok-myscript .myscript.ps1
ps e:> invok-myscript

2012年4月28日 0:24:22
c:\program files\common files
files count
20