如何在PowerShell中查找信息?

时间:2013-07-08 12:32:52

标签: powershell

我来自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本地查找上述信息?

4 个答案:

答案 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 -RegisteredGet-Module -ListAvailable查看可导入的其他模块,以便为您提供更多cmdlet。

PowerShell的优点在于创建者在别名系统中构建。它的目标之一是让你在拥有bash / DOS背景时更容易学习PowerShell。例如,如果您输入man Get-Process,它会为您提供Get-Process cmdlet的文档。要查看其所有文档,请使用man Get-Process -Fullman实际上并不存在,它是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-Memberman 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。