【问题标题】:Powershell run script with Import-Module带有 Import-Module 的 Powershell 运行脚本
【发布时间】:2015-11-23 20:13:16
【问题描述】:

我为我的管理员组创建了一个模块,其中包含一些自动化我们通常执行的一些程序的功能(将管理员添加到远程机器、C 驱动器清理等...)

这些功能的先决条件之一是生成一系列 7 个凭据,一个用于我们工作的每个域。

有没有办法在您导入模块时让脚本块运行,或者这是我应该添加到每个人的个人资料中的东西?

一位评论者提到我可以将它添加到 module.psm1 文件中,但这不起作用。这是我要运行的代码。

$creds = Import-Csv [csvfile]
$key = Get-Content [keyfile]
foreach ($cred in $creds) {
    $user = $cred.User
    $password = $cred.Hash | ConvertTo-SecureString -Key $key
    $i = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user,$password
    New-Variable -Name ($cred.Domain + "_Cred") -Value $i -Force
    }

手动运行它可以正常工作,但从 Import-Module 命令运行时不会创建凭据。

【问题讨论】:

    标签: powershell powershell-module


    【解决方案1】:

    任何不是函数的代码都会在您导入模块时运行。

    【讨论】:

    • 所以我可以把它放在 .psm1 文件中然后它会运行?
    • 是的。考虑一下当您在模块中使用Export-ModuleMember 时会发生这种情况。如果您需要查看行为或其他内容,请使用测试模块进行尝试。
    • 见上文。它似乎没有奏效。添加了我要执行的代码。
    • @Acerbity 您收到任何错误消息吗?它在什么方面不起作用?
    • 使用模块时的一个实用技巧:& 和 .有什么可能是未记录的功能。使用任何一个,您都可以提供两个参数,第一个是模块引用(来自 get-module 或类似的),第二个是脚本。使用模块引用参数,脚本将在模块的上下文中运行。例如:& $myMod {$usa_cred} 将输出 $use_cred 的值,即使它没有被导出。这对于调试脚本很有用。模块也可以有嵌入式模块,& $myMod {gmo} 将列出这些子模块。通过嵌套 & 或 .您可以访问子模块上下文。
    【解决方案2】:

    使用模块时的一个方便提示:&. 具有可能未记录的功能。使用任何一个,您都可以提供两个参数,第一个是模块引用(来自 get-module 或类似的),第二个是脚本。使用模块引用参数,脚本将在模块的上下文中运行。比如:

    & $myMod {$usa_cred} 
    

    将输出$use_cred 的值,即使它还没有被导出。这对于调试脚本很有用。模块也可以有嵌入式模块,& $myMod {gmo} 将列出这些子模块。通过嵌套&.,您可以访问子模块上下文。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-27
      • 1970-01-01
      • 1970-01-01
      • 2015-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      相关资源
      最近更新 更多