我们可以在同一个脚本中编写PowerShell模块并多次调用它吗?

时间:2018-03-08 18:01:04

标签: powershell

我正在编写一个自动化脚本,需要重新使用某些代码。我想到了编写模块并在同一个脚本中的任何地方调用它。但是当我在网上搜索时,看起来,模块需要写在一个单独的文件中并保存(.psm1)并且必要时必须导入其他的文件夹。

有没有办法在同一个脚本中编写模块并在需要时调用它?就像在Java中一样。我不想在单独的文件中编写模块并导入它。我希望我的所有代码都在同一个文件中。

请告知。

杰夫,

$Servers = {"server1","server2","server3"}

Function updatefile([string]$serverNames,[string]$PropName,[string]$PropValue,[string]$env)
{
    Write-Output "serverNames" $serverNames
    Write-Output "PropName" $PropName
    Write-Output "PropValue" $PropValue
}
 # Starting of code   
do {
  $AppInput = Read-Host "Update required for (1) Application 1 (2) Application 2"
} until ($("1","2").Contains($AppInput))


If($AppInput -eq "Application 1" -or $AppInput -eq "1")
{
        $PropName = Read-Host `n 'Enter parameter that requires update?'

        $PropValue = Read-Host `n 'Enter the value for '$PropName
}
else
{
    Write-Output "Work In Progress"
}

$env = Read-Host `n 'Which environment require change?'

If($env -eq "RD")
{
    updatefile ($RDPFServers, $PropName, $PropValue,$env)
}
else
{
    Write-Output "Work In Progress"
}

1 个答案:

答案 0 :(得分:0)

你可以做到这一点,但鉴于你所描述的问题领域,它并没有真正意义。相反,您可以将通常在模块中的函数直接放入脚本中,并且当您运行脚本时,函数将可用于"工作"脚本的一部分。 PowerShell模块用于当您有多个需要访问相同函数/ cmdlet的独立脚本时;它们允许您编写函数/ cmdlet 一次的代码,并在需要时使用它,因为它知道它始终是相同的函数。如果在脚本文件中包含函数(在实际调用它们之前定义!),则可以根据需要在脚本中调用函数 - 当脚本退出时,函数将从内存中消失。

PowerShell使用" lexical"范围界定;这意味着您必须在调用之前定义该函数;因此,您的脚本文件应该看起来像

function Do-Something {
<# function code here #>
}

function Do-SomethingElse {
<# function code here #>
}

Do-Something
Do-SomethingElse

如果在定义出现之前尝试调用函数,则会收到错误,指示函数名称未被识别为函数,别名,cmdlet等。