win执行powershell脚本

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

创建Windows Powershell Cmdlets很简单直接,也相当有价值。如果想让你的脚本执行顺利,你需要遵守三个重要步骤

1. 1. 出于安全考虑,操作系统默认不会自动执行Powershell 脚本,因此,我们需要调

整 ExecutionPolicy 来确保Powershell脚本运行。最佳方法是使用下列命令:set-ExecutionPolicy RemoteSigned.

当然修改对应的注册表也可以

1. 2. 确保你的文件后扩展是.ps1

2. 3. 从Powershell命令行调用该文件的办法是:输入完整路径 D:\script\filename

3.如果你已经在D:\scripts, 只要输入.\filename

•提示1:如何快速调用子目录的cmdlet。比如D:\scripts是我的主脚本目录,我把cmdlets保存在里面的子目录,比如D:\scripts\wmi\32proc.ps1。而我现在的

Powershell命令行就在D:\scripts目录下,这样我只要在命令行输入 .\wmi\32proc 即可

•提示2:在调用cmdlet文件时候,没有必要把文件扩展名.ps1也加上去, .\文件名足够了。

•提示3:cmdlets脚本只能在Powershell命令行中使用.\ 才能够调用,这种方法尽管看起来很麻烦,微软是出于安全考虑的才这样做。黑客,钓鱼者可能会诱使人们去执

行恶意的Powershell代码,但是如果直接双击的话并不会执行--- 除非你使用“.\ ”

方法来执行

详细介绍Powershell Cmdlets

下面的介绍和上面差不多,但我们将一步一步来演示

1)Powershell的ExecutionPolicy命令

我偏向这种方法,这样可以通过Powershell的命令来控制脚本的执行策略,在

Powershell命令行中输入下面代码

# PowerShell set-ExecutionPolicy

get-ExecutionPolicy

# Now try:

set-ExecutionPolicy -?

# Here is the crucial command:

set-ExecutionPolicy RemoteSigned

简单来说,你可以直接输入

set-executionpolicy remotedsigned

即可

1b)更改对应Powershell注册表

出于安全因素考虑,在默认设置中,微软阻止Powershell直接运行cmdlets脚本。因此我们需要更改特定的注册表键值来允许cmdlets的执行。如果你直接运行cmdlet脚本,你会看到如下的错误信息:“The execution of scripts is disabled on this system"

为此,我们需要更改注册表REG_SZ_ExecutionPolicy的键值,将其更改为RemoteSigned。还有另外两种选择Unrestricted 和Allsigned. 但是,RemoteSigned是最推荐的,因为它允许你运行本地的脚本,而会阻止其他人从另外机器上(比如互联网)攻击你。

请浏览到下面的键值去更改

HKLM\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell

把键值更改为

REG_SZ ExecutionPolicy RemoteSigned

2a)文件名和.ps1扩展名

当你使用记事本来创建Powershell Cmdlet时候,文件名必须是以.ps1作为扩展名的,如runningprocess.ps1. 有一种办法把你的Powershell命令保存到记事本是,通过菜单,选择另存,选择所有文件,runningprocess.ps1.

为了确认,你可以把“”加入进去,如“RunningProcess.ps1”,请确认文件不是RunningProcess.txt或RunningProcess.ps1.txt

在你filename.ps1的内容就是你在Powershell命令行里面输入的命令。你可以尝试输入get-process在你的测试ps1文件中,然后再执行(可能看起来太简单,但是我的方法就是保持事件简单而成功)

下面是一些高级演示,只是让你感觉到cmdlet的强大

# RunningServices.ps1 PowerShell Cmdlet

# This script generates a report about Running Services

# Guy Thomas September 2007

# Version 1.5

"" # Insert a blank line

"Report generated at " + (get-date)

"" # Insert blank line

"Services that are running"

get-service | where-object { $_.status -eq "Running"}

•提示1:实例中最关键的命令就是get-service,

•提示2:让我们看看Where 这个参数,{$_. 是一个需要介绍的特殊变量。在当前的管道中,美元符号$表明我们正在使用变量,下划线符号表明变量值在后面。进程对象有很多属性,我们这边使用的是.status, -eq 意思是左边的值等于右边的值。这个句子也就是,我们在找这样的值,值的条件是status是Running的。

•除-eq外,我们还有比较符, -match, -contain (等于以及包含)

•提示2b:调用文件

•设想:你把cmdlets脚本文件保存在一个目录里,目录是D:\scripts,在这个例子里,文件是为runningservices.ps1

•当通过调用文件名来执行cmdlet,你并不需要加入.ps1扩展名。但是你还是需要注意路径,你需要在命令行里面输入完整路径,如D:\scripts\runningservices. 这样可以执行。

在成功的基础上,我们再进一步。通过下面方法在Powershell里面定位到D:\Scripts目

录,

set-location d:\scripts

现在你就可以简单输入命令 .\runningservices, 而不用输入

d:\scripts\runningservices

相关文档
最新文档