在PowerShell中使用JScript

8

阅读Powershell的add-type文档,似乎可以在Powershell会话中添加JScript代码。

首先,是否有一个良好的示例来说明如何完成这个操作?其次,您可以使用此功能验证常规的JavaScript代码吗?(因为我了解JScript是微软的实现)

3个回答

5

这可能是一个不错的起点。

PowerShell ABC's - J is for JavaScript(作者:Joe Pruitt)

以下是文章中的代码片段:

function Create-ScriptEngine()
{
  param([string]$language = $null, [string]$code = $null);
  if ( $language )
  {
    $sc = New-Object -ComObject ScriptControl;
    $sc.Language = $language;
    if ( $code )
    {
      $sc.AddCode($code);
    }
    $sc.CodeObject;
  }
}
PS> $jscode = @"
function jslen(s)
{
  return s.length;
}
"@
PS> $js = Create-ScriptEngine "JScript" $jscode;
PS> $str = "abcd";
PS> $js.jslen($str);
4

谢谢,那几乎完美。 - RC1140

1
这是一个简单的JSON解析器:https://gist.github.com/octan3/1125017
$code = "static function parseJSON(json) {return eval('(' +json + ')');}"
$JSONUtil = (Add-Type -Language JScript -MemberDefinition $code -Name "JSONUtil" -PassThru)[1]

$obj = $JSONUtil::parseJSON($jsonString)

-PassThru会给你一个对象(实际上是两个对象;你需要第二个对象),你可以用它来调用函数。

如果你愿意,可以省略它,并像这样调用函数:

[Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes.JSONUtil]::parseJSON($jsonString)

但那有点麻烦。

0

Jscript.net http://www.functionx.com/jscript/Lesson05.htm(或VisualBasic,F# ...)必须编译成dll。

Add-Type @'
 class FRectangle {
   var Length : double;
   var Height : double;
   function Perimeter() : double {
       return (Length + Height) * 2; }
   function Area() : double {
       return Length * Height;  } }
'@ -Language JScript


$rect = [frectangle]::new()
$rect

Length Height
------ ------
     0      0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接