about_Modules

主题
    about_Modules

简短说明
    说明如何安装、导入和使用 Windows PowerShell 模块。

详细说明
    模块就是一个程序包,可以包含 Windows PowerShell 命令,例如 cmdlet、提供程序、函数、变量和别名。

    编写命令的人员可以使用模块来组织自己的命令,然后与其他人共享这些模块。获得模块的人员可
    将模块中的命令添加到自己的 Windows PowerShell 会话中,可像内置命令一样使用这些命令。

    本主题说明如何使用 Windows PowerShell 模块。有关如何编写 Windows PowerShell 模块的信息,请参阅 
    MSDN (Microsoft Developer Network) 库中的“编写 Windows PowerShell 模块”:
    https://go.microsoft.com/fwlink/?LinkId=144916。
    

 如何使用模块
    要使用某个模块,请执行以下任务:

        1. 安装模块。(通常已经预先安装好了。)
        2. 将模块导入 Windows PowerShell 会话。
        3. 找到模块添加的命令。
        4. 使用模块添加的命令。
     
    本主题说明如何执行这些任务,还介绍有关管理模块的其他有用信息。


 如何安装模块
    如果获得的模块是包含文件的文件夹形式,则需要将该模块安装到计算机上,然后才能将其导入 Windows 
    PowerShell。

    大多数模块都已经安装好了。Windows PowerShell 附带了几个预先安装的模块。在 Windows Server 2008 R2 中,
    服务器管理器中的添加功能向导自动安装所选的功能模块。在用于安装模块的安装程序中,包含许多其他模块。

    安装模块文件夹:

        1. 为当前用户创建 Modules 目录(如果尚无该目录)。

           要创建 Modules 目录,请键入:

               new-item -type directory -path $home\Documents\WindowsPowerShell\Modules                             

        2. 将整个模块文件夹复制到 Modules 目录中。

           可以使用任意方法复制文件夹,包括 Windows 资源管理器和 Cmd.exe 以及 Windows 
           PowerShell。

           在 Windows PowerShell 中,使用的是 Copy-Item cmdlet。例如,若要将 
           MyModule 文件夹从 C:\ps-test\MyModule 复制到 Modules 目录中,请键入:

               copy-item -path c:\ps-test\MyModule -dest $home\Documents\WindowsPowerShell\Modules

    可以将模块安装到任何位置,但将模块安装到默认的模块位置会使模块的管理更加方便。
    有关默认模块位置的详细信息,请参阅“模块位置和 PSModulePath”一节。



 如何查找安装的模块
     安装模块后,可将其导入到 Windows PowerShell 会话中。

     要查找安装到默认模块位置的模块,请在 Windows PowerShell 提示符处键入:

         get-module -listAvailable


     要查找已经导入到会话中的模块,请在 Windows PowerShell 提示符处键入:

         get-module

     有关 Get-Module cmdlet 的详细信息,请参阅 Get-Module。
      


 如何导入模块
    要使用模块中的命令,请将该模块导入到 Windows PowerShell 会话中。

    要将模块从默认模块位置导入到当前会话中,请使用以下命令格式。

        import-module <module-name>
    
    例如,以下命令会将 BitsTransfer 模块导入到当前会话中。

        import-module BitsTransfer

       
 
    要导入默认模块位置以外的模块,请在命令中使用模块文件夹的完全限定路径。

    例如,要将 C:\ps-test 目录中的 TestCmdlets 模块添加到会话中,请键入:

        import-module c:\ps-test\TestCmdlets

    有关将模块添加到会话中的详细信息,请参阅“Import-Module”。
    


 如何将所有模块导入 WINDOWS POWERSHELL 会话
    在 Windows 7 和 Windows Server 2008 R2 中,“导入所有模块”任务会打开一个
    Windows PowerShell 会话,其中包含所有可用的 Windows PowerShell 模块和管理单元。

    要启动包含所有可用的 Windows PowerShell 模块和管理单元的
    Windows PowerShell 会话,请使用以下过程。

    -- 右键单击任务栏中的 Windows PowerShell 图标,然后单击“导入所有模块”。

    注意:在 Windows Server 2008 R2 中,Windows PowerShell 图标默认固定在
          任务栏上。不过,必须启动一次 Windows PowerShell,才能使
          “导入所有模块”任务出现。

    在其他 Windows 版本中,要将所有可用模块导入会话中,
    请在 Windows PowerShell 提示符处键入:

        get-module -listAvailable |import-module


   
 如何查找模块中的命令
    将模块导入到 Windows PowerShell 会话中之后,可以使用模块中的命令。

    要查找模块添加的命令,请在 Windows PowerShell 提示符处键入:

        get-command -module <module-name>

    例如,要查找 BitsTransfer 模块添加的命令,请键入:

        get-command -module BitsTransfer

    有关 Get-Command cmdlet 的详细信息,请参阅 Get-Command。



 如何查找模块中的命令的相关帮助
    如果模块包含有关其导出的命令的帮助主题,则可使用 Get-Help cmdlet 
    来显示这些帮助主题。使用的命令格式与在 Windows PowerShell 中查看
    任何帮助主题的命令格式相同。

    要查找模块中的命令的相关帮助主题,请在 Windows PowerShell 命令符处键入:

        get-help <command-name>

    有关详细帮助,请键入:

        get-help <command-name> -detailed

    例如,要查找 Start-BitsTransfer cmdlet 的详细帮助,请键入:
       
        get-help Start-BitsTransfer -detailed

    有关 Get-Help 模块的详细信息,请参阅 Get-Help。




 如何删除模块
    删除模块时,将从会话中删除模块添加的命令。

    要从会话中删除模块,请使用以下命令格式。

        remove-module <module-name>

    例如,以下命令会将 BitsTransfer 模块从当前会话中删除。

        remove-module BitsTransfer

    删除模块的操作是导入模块操作的逆过程。删除模块并不会将模块卸载。
    有关 Remove-Module cmdlet 的详细信息,请参阅 Remove-Module。



 如何将模块导入所有会话中
    Import-Module 命令将模块导入当前的 Windows PowerShell 会话。此命令仅影响当前会话。

    要将模块导入到已启动的每一个 Windows PowerShell 会话中,请将 Import-Module 命令
    添加到 Windows PowerShell 配置文件。

    有关配置文件的详细信息,请参阅 about_Profiles。

  
 模块位置和 PSMODULEPATH
    Windows PowerShell 有两个默认的模块位置,一个用于系统,另一个用于当前用户。

        系统:        $pshome\Modules 
                           (%windir%\System32\WindowsPowerShell\v1.0\Modules)

        当前用户:    $home\Documents\WindowsPowerShell\Modules
                           (%UserProfile%\Documents\WindowsPowerShell\Modules)

                       - 或 -

                       $home\My Documents\WindowsPowerShell\Modules
                           (%UserProfile%\My Documents\WindowsPowerShell\Modules)



        注意:在 Windows Vista、Windows Server 2008 和 Windows 的更高版本中,要向 
              %Windir%\System32 目录中添加文件或更改其中的文件,请使用
          “以管理员身份运行”选项启动 Windows PowerShell。


    通过更改 PSModulePath 环境变量 ($env:psmodulepath) 的值,可更改系统上的默认模块位置。
    PSModulePath 环境变量是在 Path 环境变量上建模的,二者具有相同的格式。
 

    要查看默认的模块位置,请键入:

        $env:psmodulepath

    要添加默认的模块位置,请使用以下命令格式。

        $env:psmodulepath = $env:psmodulepath + ";<path>"

    命令中的分号 (;) 将新路径与列表中该路径前面的路径分隔开。


    例如,要添加"C:\ps-test\Modules"目录,请键入:

        $env:psmodulepath + ";c:\ps-test\Modules"


    将路径添加到 PSModulePath 时,Get-Module 和 Import-Module 命令将包含该路径中的模块。
       
    所设置的值只影响当前会话。要进行永久性更改,请将该命令添加到 Windows PowerShell 配置文件中,
    或使用“控制面板”中的“系统”项来更改注册表中 PSModulePath 环境变量的值。

    有关 PSModulePath 变量的详细信息,请参阅 about_Environment_Variables。
   


 模块和名称冲突
    当会话中多条命令的名称相同时,会发生名称冲突。当模块中的命令的名称与会话中
    现有命令或项的名称相同时,将该模块导入会话便会导致名称冲突。

    名称冲突可导致命令被隐藏或替换。
        -- 隐藏。键入某条命令的名称时,如果运行的不是该命令,则该命令已被隐藏,不过,通过其他
           方法可以运行该命令(例如使用生成命令的模块或管理单元的名称对命令名称进行限定)。

        -- 替换。如果命令被名称相同的命令覆盖而无法运行,则该命令已被替换。
           即使删除导致冲突的模块,也无法运行被替换的命令,除非重新启动会话。


    Import-Module 添加的命令可能隐藏和替换当前会话中的命令。另外,会话中的命令也可能隐藏模块添加的命令。

    为防止名称冲突,请使用 Import-Command 的 Prefix 参数为导入的命令创建唯一的名称。

    也可使用 Import-Module 的 Alias、Cmdlet、Function 和 Variable 参数来选择要导入的命令,排除在
    会话中会导致名称冲突的命令。

    即使命令被隐藏,也可以使用生成该命令的模块或管理单元的名称对命令名称进行限定,从而运行该命令。
    当会话中有名称相同的多个命令时,由 Windows Powershell 命令优先级规则确定运行哪个命令。

    例如,如果会话包含名称相同的函数和 cmdlet 时,Windows PowerShell 默认运行函数。如果会话包含名称相
    同、类型相同的命令(例如名称相同的两条 cmdlet),则默认运行最近添加的那一条命令。

    有关详细信息,包括优先级规则的说明和运行隐藏命令的说明,请参阅 about_Command_Precedence。
     
     
       
 模块和管理单元
    可以将命令从模块和管理单元添加到会话中。模块可添加所有类型的命令,包括 cmdlet、提供程序、
    函数和项(如变量、别名和 Windows PowerShell 驱动器)。管理单元只能添加 cmdlet 和提供程序。

    事实上,尽管可以通过键入相应名称或运行添加脚本来添加函数、别名、变量和驱动器,会话中的
    所有 cmdlet 和提供程序都来自模块或管理单元。

    从会话中删除模块或管理单元时,请使用以下命令确定要删除的命令。

    要查找会话中的 cmdlet 的来源,请使用以下命令格式:

        get-command <cmdlet-name> | format-list -property verb, noun, pssnapin, module

    例如,要查找 Get-Date cmdlet 的来源,请键入:

        get-command get-date | format-list -property verb, noun, pssnapin, module

    有关 Windows PowerShell 管理单元的详细信息,请参阅 about_PSSnapins。


另请参阅
    about_Command_Precedence
    about_PSSnapins
    Get-Command
    Get-Help
    Get-Module
    Import-Module
    Remove-Module