PowerShell中一个分号引发的问题

今天在用start-process这个cmdlet去新开一个窗口执行powershell的时候遇到的一个问题

看一下测试代码:

以下这个ps代码命名为profile.ps1,并且保存在%UserProfile%\My Documents\WindowsPowerShell这个目录下

它就相当于是运行powershell时自动加载的脚本,代码如下

  
  
  
  
  1. function print   
  2. {   
  3.     [CmdletBinding()]   
  4. Param(   
  5.     [ValidateNotNullOrEmpty()]   
  6.     $param1="default1"   
  7.       
  8.     [ValidateNotNullOrEmpty()]   
  9.     $param2="default2"   
  10.     )   
  11.       
  12.     write-host $param1   
  13.     write-host $param2   
  14.     Read-Host   
  15. }  
  16.  

 

然后再由一段执行的代码

  
  
  
  
  1. function Test-Print   
  2. {   
  3.     [CmdletBinding()]   
  4. Param(   
  5.     [ValidateNotNullOrEmpty()]   
  6.     $param1,   
  7.       
  8.     [ValidateNotNullOrEmpty()]   
  9.     $param2   
  10.     )   
  11.     Write-Host $param1   
  12.     
  13.     $arguments="print $param1 $param2"   
  14.     start-process -FilePath "$PSHome\powershell.exe" -ArgumentList $arguments -RedirectStandardError d:\t.log   
  15.       
  16. }  
  17.  
  18. Test-Print "test1;ok" "test2"   
  19.  

 

最后输出的结果是这样的

Capture

 

我本意是想输出

test1;ok

test2

 

我们可以在d:\t.log文件中看到这样的错误信息

The term 'ok' is not recognized as the name of a cmdlet, function, script file,
or operable program. Check the spelling of the name, or if a path was included
, verify that the path is correct and try again.
At line:1 char:15
+ print test1;ok <<<<  test2
    + CategoryInfo          : ObjectNotFound: (ok:String) [], CommandNotFoundE
   xception
    + FullyQualifiedErrorId : CommandNotFoundException
 
 

就是说参数中的分号将它们分开为两个语句了,所以在上下文中并没有定义ok这个东西,所以报这个错。

我尝试以为可以将分号转义,所以这样运行

  
  
  
  
  1. Test-Print "test1`;ok" "test2"  

一样的错误

 

我再使用双引号试试?

  
  
  
  
  1. Test-Print "`"test1;ok`"" "test2"  

依然是一样的错误

好吧!咱就只能传数组,在函数中自己解决这个问题了!?

 

还有一个问题,就是想上面这样,双引号也是无法传给print这个函数的

就是说我想打印出的结果想是这样的

“test1”

test2

但实际打印的确是

test1

test2

你可能感兴趣的:(powershell)