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