我正在编写一个自动化脚本,需要重新使用某些代码。我想到了编写模块并在同一个脚本中的任何地方调用它。但是当我在网上搜索时,看起来,模块需要写在一个单独的文件中并保存(.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"
}
答案 0 :(得分:0)
你可以做到这一点,但鉴于你所描述的问题领域,它并没有真正意义。相反,您可以将通常在模块中的函数直接放入脚本中,并且当您运行脚本时,函数将可用于"工作"脚本的一部分。 PowerShell模块用于当您有多个需要访问相同函数/ cmdlet的独立脚本时;它们允许您编写函数/ cmdlet 一次的代码,并在需要时使用它,因为它知道它始终是相同的函数。如果在脚本文件中包含函数(在实际调用它们之前定义!),则可以根据需要在脚本中调用函数 - 当脚本退出时,函数将从内存中消失。
PowerShell使用" lexical"范围界定;这意味着您必须在调用之前定义该函数;因此,您的脚本文件应该看起来像
function Do-Something {
<# function code here #>
}
function Do-SomethingElse {
<# function code here #>
}
Do-Something
Do-SomethingElse
如果在定义出现之前尝试调用函数,则会收到错误,指示函数名称未被识别为函数,别名,cmdlet等。