Function 从PowerShell中的不同文件调用函数
我做了很多谷歌搜索,但还没有找到解决问题的方法。 我正在为我们的服务台重建一个工具,但遇到了一个问题 我使用带有开关块的菜单和子菜单。 菜单本身是同一文件中的函数。然而,除了子菜单的“编号”之外,我还有一些其他命令设置为我也想使用的函数。 我曾在同一文档中尝试在开关上方声明函数,并尝试使用不同的文件调用这些函数,但我无法使其工作Function 从PowerShell中的不同文件调用函数,function,powershell,syntax,Function,Powershell,Syntax,我做了很多谷歌搜索,但还没有找到解决问题的方法。 我正在为我们的服务台重建一个工具,但遇到了一个问题 我使用带有开关块的菜单和子菜单。 菜单本身是同一文件中的函数。然而,除了子菜单的“编号”之外,我还有一些其他命令设置为我也想使用的函数。 我曾在同一文档中尝试在开关上方声明函数,并尝试使用不同的文件调用这些函数,但我无法使其工作 Function sys { Param ( [string]$computer ) systeminfo /s $computer
Function sys
{
Param (
[string]$computer
)
systeminfo /s $computer
}
# Visa huvudmeny
Function ShowMenu
{
Write-Host "
Kommandon:
1 - Alternativ för datorer
2 - Alternativ för användare
3 - Övriga alternativ
"
}
# Visa Datorer-meny
Function subComputer
{
Write-Host "
Kommandon:
rem [datornamn] - se vem som är inloggad, tryck på y för att koppla upp dig
rdp [datornamn] - Starta rdp och koppla upp mot dator
rc [datornamn] - mappa upp användarens dator
mac [datornamn] - hämta datorns MAC-adress sys [datornamn] - se information om datorn/systemet
update [datornamn] - kör GPUpdate /force på användarens FMAP
reboot [datornamn] - Starta om användarens FMAP
ping [datornamn] - pinga användares dator
pingt [datornamn] - pinga användares dator (pingsnurra), avbryt med Ctrl-C
q - tillbaka till huvudmenyn
"
}
# Visa Användare-meny
Function subUser
{
Write-Host "
Kommandon:
password - starta lösenordsgeneratorn
q - tillbaka till huvudmenyn
"
}
# Visa Övrigt-meny
Function subMisc
{
Write-Host "
Kommandon:
remlog - Visa loggfilen för rem
rdplog - Visa loggfilen för rdp
archive - Arkivera loggfilerna
gw - öppna fönstret för att kunna pinga gateway
password - starta lösenordsgeneratorn
q - tillbaka till huvudmenyn
"
}
do
{
Clear-Host
ShowMenu
$menuItem = Read-Host
switch($menuItem)
{
"1"
{
do{
Clear-Host
subComputer
$subComputer = Read-Host
switch($subComputer)
{
"1"{subComputer}
"2"{subUser}
"3"{subMisc}
}
}
until ($subComputer -eq "q")
}
"2"
{
do{
Clear-Host
subUser
$subUser = Read-Host
switch($subUser)
{
"1"{subComputer}
"2"{subUser}
"3"{subMisc}
}
}
until ($subUser -eq "q")
}
"3"
{
do{
Clear-Host
subMisc
$subMisc = Read-Host
switch($subMisc)
{
"1"{subComputer}
"2"{subUser}
"3"{subMisc}
}
}
until ($subMisc -eq "q")
}
default{. 'C:\Temp\SDV 4.2 Lite\WindowsPowerShell\moduler\func.ps1'}
}
}
until ($menuItem -eq "q")
现在我已经将外部函数文件放在默认值中,但这不起作用。我不知道把它放在哪里,让它调用我的其他函数。它可以毫无问题地接受1、2、3和q。在代码到达调用函数的点之前,您需要点源
func.ps1
文件-在进入循环之前这样做可能是您想要的:
# dot-source function definitions, discard any output from the script itself
$null = . 'C:\Temp\SDV 4.2 Lite\WindowsPowerShell\moduler\func.ps1'
do
{
# ...
}until($menuItem -eq "q")
不,不幸的是,这似乎根本不起作用。例如,它加载菜单(功能)
showMenu
。我再次将函数直接放入脚本中。什么也不做。一旦进入循环,所有其他命令都停止工作,1、2、3和q除外。我是否需要在脚本中的某个地方使用该变量,还是仅将其用作占位符?“例如,它加载菜单(函数)showMenu。”-因此它可以工作?我不知道哪个部分不起作用?还不清楚为什么要嵌套相同的菜单选项(例如,我可以通过在主菜单中选择2
,或者在子菜单中选择1
,然后选择2
来执行subUser
)?确定。我知道我有点不清楚。有一个菜单showMenu
,它有三个子菜单subComputer
、subUser
和subMisc
。它们被声明为函数,并在循环中工作。子菜单中还有其他命令。命令“password”应该调用具有相同名称的函数,但它不是。当不在循环中时,它会按它应该的方式执行,但在循环中它不会。我对它为什么不能在循环中工作感到困惑。当我键入密码并按enter键时,不会发生任何事情。它只是清除提示,将其保留为空。@JoakimHellström请查看您在问题中发布的代码-password
找不到-您只需在子菜单中不断调用sub*
?好的。我已经更新了代码。添加了功能sys
以及我使用的菜单。很抱歉格式化了。可以在标记为“1”的菜单选项下找到命令sys
。