PS C:\> GET-命令ipconfig |格式列表*FileVersionInfo:文件:C:\ WINDOWS \ SYSTEM32 \ IPCONFIG.EXEINTERNALNAME:IPCONFIG.EXEOriginalFilename: ipconfig.exe文件版本:5.1.2600.2180(xpsp_sp2_rtm.040803-2158)FileDescription:IP配置实用程序产品名称:Microsoft®Windows®操作系统的ProductVersion:5.1.2600.2180调试:假修补:假抢鲜:假PrivateBuild:假SpecialBuild:假语言:英语(美国)2020欧洲杯夺冠热门路径:C:\ WINDOWS \ SYSTEM32 \ IPCONFIG.EXE扩展:. exe定义:C:\ WINDOWS \ SYSTEM32 \ IPCONFIG.EXE名称:IPCONFIG.EXECommandType:应用程序
对于一个函数定义属性是函数体:
PS C:\> GET命令提示符CommandType名称定义----------- ---- ----------函数提示写主机("PS " + $(Get-Lo…PS C:\>
有了一个别名,该定义属性是别名命令:
PS C:\> GET命令写CommandType名称定义----------- ---- ----------别名写写输出PS C:\>
随着一个脚本文件中,定义属性是路径的脚本。对于非PowerShell脚本(如。bat要么.VBS文件),返回的信息是相同的其他现有的应用程序。
理解变量
一种变量是数据的存储位置。在大多数炮弹,可以存储在一个变量的唯一数据是文本数据。在先进的炮弹和编程语言,存储在变量的数据可以是几乎任何东西,从字符串对象序列。同样,PowerShell的变量可以是任何事情。
要定义PowerShell的变量,你必须用它命名$前缀,这有助于从别名的cmdlet,文件名和其他项目壳运营商可能希望使用描出变量。变量名是大小写敏感的,并且可以包含字母数字字符(A-Z和0-9)和下划线的任意组合(_)字符。虽然PowerShell的变量没有固定的命名约定,使用反映了变量包含的数据类型的名称建议,如本例所示:
PS C:\> $ MSProcesses = GET-过程|其中{$ _。公司-match “* *微软”}p C: \ > MSProcesses美元处理NPM(K) PM(K) WS(K) VM(M) CPU(s) Id进程名------- ------ ----- ----- ----- ------ - -----------68 4 1712 6496 30 0.19 2420 CTFMON715 21 27024 40180 126 58.03 3620探险647 19 23160 36924 109 18.69 1508我探索522 11 31364 30876 151 6.59 3268的powershell354 17 28172 47612 482 36.22 2464 WINWORDPS C:\>
你可以从前面的例子中看到,包含内的信息$ MSProcesses变量是当前在系统上运行Microsoft进程的集合。
注意:变量名可以由任何字符,包括空格,所提供的名称封由括号({和}符号)。但是,如果您使用的是非标准的变量名,PowerShell的警告你,不推荐这种做法。
内置变量
当PowerShell会话开始时,若干变量被自动定义,如本例所示:
PS C:\>设置位置可变:PS变量:\> GET-childitem名称值---- -----错误{CommandNotFoundException}DebugPreference SilentlyContinue概要文件\ \鲍勃'shosting.com \家庭\泰森\ \ P…我的文档HOME U:\主机System.Management.Automation.Internal.Host.In ...MaximumHistoryCount 64MaximumAliasCount 4096输入的System.Array + SZArrayEnumerator堆栈跟踪在System.Management.Automation.CommandDis ...ReportErrorShowSource 1执行上下文System.Management.Automation.EngineIntrinsics真真VerbosePreference SilentlyContinueShellId Microsoft.PowerShell虚假空值MaximumFunctionCount 4096ConsoleFileNameReportErrorShowStackTrace 0FormatEnumerationLimit 4?真正PSHOME C:\Program Files\Windows PowerShell \ v1.0MyInvocation System.Management.Automation.InvocationInfoPWD变量:\^设置位置_ReportErrorShowExceptionClass 0ProgressPreference继续ErrorActionPreference继续ARGS {}MaximumErrorCount 256NestedPromptLevel 0WhatIfPreference 0$变量:= 0 ReportErrorShowInnerExceptionErrorView NormalView时WarningPreference继续PID 3124ConfirmPreference高MaximumDriveCount 4096MaximumVariableCount 4096PS C:\>
这些内置的shell变量被分为两种类型。第一种类型,因为它存储当前PowerShell会话配置信息在PowerShell中有特殊的意义。这些特殊的变量中,应考虑以下因素值得注意,因为他们经常用在这本书:
$ _- 包含当前管道对象
美元的错误包含当前PowerShell会话的错误对象
PS C:\> GET服务|其中对象{$ _。名称-match “W32Time服务”}状态名称显示名称------ ---- -----------运行W32Time的Windows时间PS C:\>PS C:\> $错误在表达式或语句意外令牌“名称”。PS C:\>
第二类内置变量由用于控制PowerShell行为的首选项设置组成。表2.4描述了这些变量PowerShell用户指南。
注意:命令策略可以是以下字符串之一:SilentlyContinue,NotifyContinue,NotifyStop, 要么查询。
表2.4 PowerShell的首选项设置
名称 |
允许值 |
描述 |
$ DebugPrefereñCE |
命令策略 |
当数据通过写调试在剧本或WriteDebug()在cmdlet或提供。 |
ErrorActionPreference美元 |
命令策略 |
当数据通过写入错误在剧本或WriteError ()在cmdlet或提供。 |
MaximumAliasCount美元 |
诠释 |
别名的最大数量。 |
$ MaximumDriveCount |
诠释 |
允许的驱动器的最大数量。 |
MaximumErrorCount美元 |
诠释 |
通过持有错误的最大数量美元的错误。 |
MaximumFunctionCount美元 |
诠释 |
可以创建的函数的最大数目。 |
$ MaximumVariableCount |
诠释 |
可以创建的变量的最大数量。 |
MaximumHistoryCount美元 |
诠释 |
最大条目数保存在命令历史记录。 |
$ ShouldProcessPreference |
命令策略 |
要采取的行动时,为ShouldProcess在小命令被使用。 |
ProcessReturnPreference美元 |
布尔 |
为ShouldProcess返回此设置。 |
$ ProgressPreference |
命令策略 |
当数据通过写进展在剧本或WriteProgress ()在cmdlet或提供。 |
$ VerbosePreference |
命令策略 |
当数据通过Write-Verbose在剧本或WriteVerbose ()在cmdlet或提供。 |
了解别名
不幸的是,除非您正在运行一个脚本,否则使用PowerShell需要大量的输入。例如,打开PowerShell控制台并尝试输入以下命令:
PS C:\> GET-过程|其中对象{$ _。公司-match “* *微软”}
|格式-表名,ID,路径-自动调整大小
这是一个很长的命令输入。幸运的是,最喜欢的贝壳,PowerShell支持的cmdlet和可执行文件的别名。所以,如果你想减少对打字这个命令,你可以使用PowerShell的默认别名。使用这些别名,该获取进程例子是这样的:
PS C:\> GPS |?{$ _公司-match “*微软*。”} |FT名称,ID,路径
-自动尺寸
这个示例并没有减少大量的输入,但是别名可以节省一些时间并防止输入错误。要获取会话中支持的当前PowerShell别名的列表,请使用混叠如下面的示例所示。请注意,由于空间限制,该示例只显示了可用PowerShell别名的一小部分;实际执行时,将返回完整列表混叠cmdlet。
PS C:\> GET-别名CommandType名称定义----------- ---- ----------别名DC添加内容别名ASNP附加PSSnapin别名CLC清除内容别名cli Clear-Item别名CLP清除-ItemProperty别名clv Clear-Variable别名CPI拷贝项目PS C:\>
情迷别名的cmdlet
有几个别名的cmdlet,可以定义新的别名,别名出口,进口别名,并显示现有的别名。通过使用下面的命令,你可以得到所有相关的别名cmdlet的列表:
PS C:\> GET命令* -AliasCommandType名称定义----------- ---- ----------小命令导出锯齿出口锯齿[-Path] <字符串...Cmdlet Get-Alias Get-Alias [[-Name]小命令导入锯齿导入锯齿[-Path] <字符串...小命令新锯齿新锯齿[ - 名称] <字符串> [...Cmdlet Set-Alias Set-Alias [-Name] […
您已经看到了如何使用混叠cmdlet生成当前PowerShell会话中可用的别名列表。该出口别名和进口别名的cmdlet来导出和导入别名列出了从一个PowerShell会话到另一个。最后,新别名和设置别名cmdlet允许您为当前PowerShell会话定义新的别名。
注意:在PowerShell中的别名实施限制。正如前面提到的,别名仅适用于cmdlet的或可执行文件,不用于与参数一起使用的cmdlet和可执行文件。但是,有一些方法可以解决这个限制。一种方法是在变量中定义命令,然后从其他命令中调用该变量。方法的问题是,该变量只能在当前PowerShell会话中调用,除非在profile.ps1文件。第二种(首选的)方法是将命令放在函数中。
创建持久别名
该alises当您使用创建新别名和设置别名cmdlet仅在当前的PowerShell会话是有效的。退出PowerShell会话丢弃任何现有的别名。有别名跨越PowerShell会话持续存在,则必须在定义它们profile.ps1文件中,如在此实例中:
设置别名新新对象集别名时间把最新...
虽然命令缩短是有吸引力的,不建议大量使用别名。原因之一是,别名都不太移植到脚本。例如,如果你在脚本中使用了大量的别名,你必须包括Set-Aliases在脚本开始时进行排序,以确保在脚本运行时,不管机器或会话配置文件是什么,这些别名都存在。
然而,除了便携性更大的担忧是,别名可以经常混淆或掩盖命令或脚本的真正含义。您定义的别名可能是有意义的你,但不是每个人分享你的逻辑定义别名。所以,如果你希望别人了解你的脚本,你必须小心使用过多的别名。相反,考虑创建可重用的功能。
注意:在为脚本创建别名时,使用其他人可以理解的名称。例如,除了对脚本进行编码之外,没有理由创建仅由两个字母组成的别名。
创建第一个脚本
大多数本章中的命令是交互式的,这意味着你在PowerShell提示符下输入命令,并返回输出。虽然使用PowerShell的交互是需要被一次完成的任务有帮助的,它不是执行重复任务的自动化的有效途径。幸运的是,PowerShell有包含存储的命令文件的读取能力,使您能够撰写,保存,并在需要时调用命令的序列。存储的命令的这些序列通常被称为脚本。
PowerShell脚本仅仅是存储在a中的文本文件名为.ps1扩展。您可以使用任何文本编辑器(如记事本)来创建包含命令的文本文件,这些命令构成了PowerShell脚本。例如,打开记事本,输入以下命令:
get-service | where-object{$_。情商“停止”}
接下来,保存此文件的名称ListStoppedServices.ps1在您选择的目录中。对于本例,C:\脚本目录中。
在可以运行此脚本,你需要调整PowerShell的执行策略,因为默认设置不允许针对恶意脚本保护运行的脚本。若要更改此设置,您可以使用设置ExecutionPolicy小命令,如以下示例所示。您也可以使用GET-ExecutionPolicy验证当前执行策略的cmdlet。(第5章更详细地讨论了PowerShell的安全性和最佳实践。)
PS C:\>设置executionpolicy下RemoteSignedp C: \ > get-executionpolicy下RemoteSignedPS C:\>
该下RemoteSigned策略允许在本地创建的脚本在没有数字签名的情况下运行,但是仍然需要从Internet下载的脚本进行数字签名。这些设置为您提供了从本地机器运行未签名脚本的灵活性,但是,它们提供了一些针对未签名外部脚本的保护。
将PowerShell的执行策略更改为下RemoteSigned,你可以通过简单地键入脚本的完整目录路径和文件名运行任何PowerShell会话脚本。在以下示例中,在进入C:\脚本\ ListStoppedServices.ps1命令产生以下输出:
p C: \ > C: \ \ ListStoppedServices.ps1的脚本状态名称显示名称------ ---- -----------停止报警器报警器停止AppMgmt应用程序管理停止aspnet_state ASP.NET状态服务停止比特后台智能传输…停止浏览器计算机浏览器PS C:\>