将Powershell变量传递到命令提示符行

时间:2019-04-17 16:36:08

标签: powershell batch-file vpn sonicwall

我想制作一个PowerShell脚本,该脚本可用于将计算机连接到各种客户端的SonicWall VPN(特别是通过Global VPN和NetExtender)。我想像一个用户界面来提示用户(它将设置变量),然后使用该信息传递给命令提示符中的命令行。

我希望能够在脚本的cmd行中应用输入的信息。

我尝试通过(使用来自应用商店的应用)并与Microsoft VPN客户端连接来使用MobileConnect连接,但是并不能捕获所有网络信息。尤其是DNS服务器。

最好的方法是安装Global VPN或NetExtender并通过cmd线路连接;这样可以获取整个网络信息。

这是运行它的基本命令:

 Function Connect-VPN {

 Set-Location -Path "C:\Program Files (x86)\SonicWALL\SSL-VPN\NetExtender"

 cmd /c "NECLI connect -s address:4433 -u Uname -p Password -d Domain -A"

 Set-Location -Path C:\

 }

基本上,您可以更改目录并使用这些参数执行命令。

我想在POSH中提示,使用用户输入创建变量,然后将这些参数传递下来。

我现在拥有的是:

param(
  [string]$Testadd ,
  [string]$Testun ,
  [string]$TestPW ,
  [string]$TestDom 
  )


If ($Testadd -eq "")
   {$Testadd = (Read-Host "test")
   }

If ($Testun -eq "")
   {$Testun = (Read-Host "test")
   }


If ($TestPW -eq "")
   {$TestPW = (Read-Host "test")
   }


If ($TestDom -eq "")
   {$TestDom = (Read-Host "test")
   }

 Set-Location -Path "C:\Program Files (x86)\SonicWALL\SSL-VPN\NetExtender"

 cmd /c "NECLI connect -s "$($Testadd)" -u "$($Testun)" -p "$($TestPW)" -d "$($TestDom)" -A"

 Set-Location -Path C:\

问题在于所有参数都为空。我不知道是否可能,但我想看看。

3 个答案:

答案 0 :(得分:0)

您可以在运行cmd之前尝试构建字符串

param (
    [string]$Testadd,
    [string]$Testun,
    [string]$TestPW,
    [string]$TestDom
)


If ($Testadd -eq "")
{
    $Testadd = (Read-Host "testadd")
}

If ($Testun -eq "")
{
    $Testun = (Read-Host "testun")
}


If ($TestPW -eq "")
{
    $TestPW = (Read-Host "testpw")
}


If ($TestDom -eq "")
{
    $TestDom = (Read-Host "testdom")
}

Set-Location -Path "C:\Program Files (x86)\SonicWALL\SSL-VPN\NetExtender"

#build the string before
$cmd = "NECLI connect -s " + $($Testadd) + " -u " + $($Testun) + " -p " + $($TestPW) + " -d " + $($TestDom) + " -A"

# Or even like this
$cmd = "NECLI connect -s $Testadd -u $Testun -p $TestPW -d $TestDom -A"

# exec command
cmd /c $cmd

Set-Location -Path C:\

答案 1 :(得分:0)

要添加到@Desinternauta,我怀疑这是命令解释引号和变量的方式。也就是说,当您按原样写出字符串时,它会添加空格:

$b = "b"
Write-Host "a"$($b)"c"

输出:

a b c

好消息是双引号字符串允许您将变量嵌入到字符串中:

cmd /c "NECLI connect -s $Testadd -u $Testun -p $TestPW -d $TestDom -A"

答案 2 :(得分:0)

调用使用cmd.exe的外部exe /命令时,需要特别注意和详细说明。您也不需要直接调用cmd.exe,因为这只会发生。这是有据可查的。例如:

PowerShell: Running Executables

  
      
  1. 呼叫运营商&
  2.   
     

为什么:用于将字符串视为SINGLE命令。对交易有用   带有空格。

     

在PowerShell V2.0中,如果您正在运行7z.exe(7-Zip.exe)或其他   以数字开头的命令,您必须使用命令   调用运算符&。

     

PowerShell V3.0解析器现在更加智能,在这种情况下,您不必   需要&了。

     

详细信息:运行命令,脚本或脚本块。呼叫接线员,   也称为“调用运算符”,使您可以运行以下命令   存储在变量中并由字符串表示。因为打电话   操作员不解析命令,无法解释命令   参数

 # Example: 

& 'C:\Program Files\Windows Media Player\wmplayer.exe' "c:\videos\my home video.avi"  /fullscreen
  
      
  1. 开始过程(开始/树液)
  2.   
     

为什么:启动一个进程并返回.Net进程对象   提供了PassThru。它还允许您控制启动过程的环境(用户配置文件,输出重定向   等等)。您还可以使用Verb参数(右键单击文件,   动作列表),以便您可以播放wav文件。

     

详细信息:执行一个程序,返回程序的过程对象。   应用。允许您控制文件(动词   以上所述)并控制应用运行的环境。   您还可以等待过程结束。你也可以   订阅流程Exited事件。

#Example: 

#starts a process, waits for it to finish and then checks the exit code.

$p = Start-Process ping -ArgumentList "invalidhost" -wait -NoNewWindow -PassThru

$p.HasExited

$p.ExitCode


10. Stop-Parsing Symbol --%

Why: Its a quick way to handle program arguments that are not standard. Also its the new cool way to do it.

 Details: The stop-parsing symbol (--%), introduced in Windows PowerShell 3.0, directs Windows PowerShell to refrain from interpreting input as Windows PowerShell commands or expressions. When calling an executable program in Windows PowerShell, placethe stop-parsing symbol before the program arguments.

 After the stop-parsing symbol --% , the arguments up to the end of the line (or pipe, if you are piping) are passed as is.

#Examples:

# icacls in V2

# You must  use escape characters to prevent PowerShell from misinterpreting the parentheses.

icacls X:\VMS /grant Dom\HVAdmin:`(CI`)`(OI`)F



# In V3 you can use the stop-parsing symbol. 
icacls X:\VMS --% /grant Dom\HVAdmin:(CI)(OI)F

另请参阅:

Using Windows PowerShell to run old command line tools (and their weirdest parameters)

Solve Problems with External Command Lines in PowerShell

报价

About Quoting Rules

A Story of PowerShell Quoting Rules