我来自unix背景,我用bash和bourne编写了一些脚本。但我需要使用PowerShell编写一些脚本,而我很难找到信息。
例如,在* nix中,我可以执行man bash
并阅读有关如何使用bash的所有内容,我可以man some_command
来阅读有关特定命令的内容。到目前为止,我发现了一些类似于get-command
的powershell等价物来查看所有可用的命令,但获取和使用对象确实让我很困惑。
例如,我正在尝试使用PowerShell创建一个新的计划任务,并在SO上找到了一些示例代码。这是一个snippit:
$schedule = new-object -com Schedule.Service
$schedule.connect()
$tasks = $schedule.getfolder("\").gettasks(0)
$tasks | select Name, LastRunTime
foreach ($t in $tasks) {
foreach ($a in $t.Actions) {
$a.Path
}
}
我理解这个脚本正在做什么,但是没有经验我怎么知道要做以下事情:
new-object -com Schedule.Service
.connect
方法.getfolder
和.gettasks
对象很多代码对我来说都很模糊,所以我会在哪里使用PowerShell本地查找上述信息?
答案 0 :(得分:2)
我不熟悉powershell脚本,但发现了这个,可能有一些参考使用:
在第一个链接上可以找到PowerShell Scripting网络广播等等。
使用Windows PowerShell API调度作业:http://msdn.microsoft.com/en-us/library/windows/desktop/jj150476%28v=vs.85%29.aspx
Windows PowerShell入门指南:http://technet.microsoft.com/library/ee221100.aspx
关于Windows PowerShell,请访问以下帮助主题:
get-command:从cmdlet代码中获取有关cmdlet的信息
get-member:获取对象的属性和方法
where-object:过滤对象属性
about_object:解释Windows PowerShell中对象的使用
about_remote:讲述如何在远程计算机上运行命令。
概念性帮助文件名为“about_”,例如:
about_regular_expression。
help命令还会显示cmdlet的别名。这些 是替代名称或昵称,通常更容易键入。 例如,Invoke-Command cmdlet的别名是“remote”。
要获取别名,请键入:
GET-别名
希望这会有所帮助。
答案 1 :(得分:2)
所以你找到了Get-Command
。这是一个很好的开始,它将向您显示可用的cmdlet。导入snapins / modules后可能会有更多可用。使用Get-PSSnapin -Registered
和Get-Module -ListAvailable
查看可导入的其他模块,以便为您提供更多cmdlet。
PowerShell的优点在于创建者在别名系统中构建。它的目标之一是让你在拥有bash / DOS背景时更容易学习PowerShell。例如,如果您输入man Get-Process
,它会为您提供Get-Process cmdlet
的文档。要查看其所有文档,请使用man Get-Process -Full
。 man
实际上并不存在,它是Get-Help
的别名,它在UNIX / Linux上具有与man
相同的功能。您可以使用Get-Alias
cmdlet显示已注册的别名及其定义。
您找到的脚本正在使用COM
对象。您可以告诉我-com
用于New-Object
的{{1}}参数(实际上是-ComObject
的缩写)。与.NET对象不同,PowerShell不会内置COM
个对象,但PowerShell支持它们的方式与VBScript支持它们的方式相同。 Get-Member
cmdlet将显示.NET和COM类型的对象成员(属性和方法)。有关Get-Member
以下的更多信息。
您找到的脚本使用New-Object
cmdlet创建名为COM
的{{1}}对象的实例。有两种主要方法可以找到有关此对象的更多信息。第一个是您可以使用Schedule.Service
cmdlet直接在PowerShell中列出其属性和方法。此cmdlet适用于.NET和COM对象。它是一个非常宝贵的cmdlet,它将向您展示您可以对对象执行的操作。使用Get-Member
或man
Get-Help
了解相关信息。实际上,您可以使用Get-Member
来发现您询问的对象成员,例如Get-Member
方法。第二种方法是在MSDN上查找对象的文档,MSDN是Microsoft的开发人员文档网站。 This可能是该特定对象的最佳页面。
答案 2 :(得分:1)
Google第一次点击" powershell创建计划任务"引导here,其中一个答案引用Schedule.Service
COM对象。 That object's documentation为您提供了对象的所有方法和属性的列表。
您还可以使用get-member
来发现所有方法&会话中任何变量或对象的属性。
$schedule = new-object -com Schedule.Service
TypeName: System.__ComObject#{2faba4c7-4da9-4013-9697-20cc3fd40f85}
Name MemberType Definition
---- ---------- ----------
Connect Method void Connect (Variant, Variant, Variant, Variant)
GetFolder Method ITaskFolder GetFolder (string)
GetRunningTasks Method IRunningTaskCollection GetRunningTasks (int)
NewTask Method ITaskDefinition NewTask (uint)
Connected Property bool Connected () {get}
ConnectedDomain Property string ConnectedDomain () {get}
ConnectedUser Property string ConnectedUser () {get}
HighestVersion Property uint HighestVersion () {get}
TargetServer Property string TargetServer () {get}
Component Object Model是Windows的核心部分,默认Windows安装中有数百个(如果不是数千个)COM对象可用于与操作系统和安装的其他软件进行交互(软件可以将自己的一组对象安装为好)。现在很多都可以用.NET Framework程序集和PowerShell模块,管理单元和cmdlet替换。
你如何发现COM对象?通常是通过Google运行搜索您尝试执行的操作,通常您会发现某人已经发布了类似的内容,或者您的搜索会关闭对象自己的文档中的文字在线。
如果您使用的是PowerShell 3,则根本不需要使用Schedule.Service
- 还有一组用于处理预定任务的cmdlet。有关入门者,请参阅New-ScheduledTask
。
如果您正在寻找通用的PowerShell教程,我通常会指点人at this one
答案 3 :(得分:1)
您在正确的轨道上Get-Command *foo*
将列出包含单词foo的所有Cmdlet,Get-Help New-Object
将显示New-Object cmdlet的帮助文件。
但是,您可以直接使用COM对象,这远远早于Powershell。 COM编程很老,可能很古老。 Powershell允许您与COM进行交互,但它并不是真正的“Powershell方式”。
在Powershell 3中,我找到了Register-ScheduledJob
:
The Register-ScheduledJob cmdlet creates scheduled jobs on the local computer.
如果可能的话,我会说这是使用COM界面的首选方法,因为它可能更容易,更多的是Powershelley。