小编Tol*_*ayi的帖子

带有params*和*函数的Powershell脚本

我想写一个PowerShell脚本,它接受参数并使用函数.

我试过这个:

param
(
  $arg
)

Func $arg;


function Func($arg)
{
  Write-Output $arg;
}
Run Code Online (Sandbox Code Playgroud)

但我得到了这个:

The term 'Func' 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 func.ps1:6 char:5
+ Func <<<<  $arg;
    + CategoryInfo          : ObjectNotFound: (Func:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
Run Code Online (Sandbox Code Playgroud)

很好,我想.我会尝试这样做:

function Func($arg)
{
  Write-Output $arg;
}


param …
Run Code Online (Sandbox Code Playgroud)

powershell params

5
推荐指数
1
解决办法
2万
查看次数

PowerShell中的美元符号,函数关键字和脚本块

我有这个powershell脚本:

function Func1 ($val)
{
  Write-Host "$val is processed by Func1";
}

function Func2($val)
{
  Invoke-Command -ScriptBlock `
  ${function:Func1} -ArgumentList "$val is processed by Func2 and";
}

function Func3($val)
{
  $function:Func2.Invoke("$val is processed by Func3 and");
}

Func3 "Value";
Run Code Online (Sandbox Code Playgroud)

这工作 - 它输出值由Func3处理并由Func2处理并由Func1处理 - 但我对两件事感到困惑:

是什么在$ {函数:function-name}的代码(即一个美元符号后面用大括号其次是功能,后跟一个冒号后面的功能,然后右大括号的名称)FUNC2是什么意思?我可以看到它调用Func1,但我真的不明白它为什么会起作用.

Func3 中的$ function:function-name.Invoke代码是什么意思?我觉得它正在使用脚本块功能,因为调用了Invoke方法,但我不清楚$ function.function-name是一个脚本块.

powershell function dollar-sign

5
推荐指数
1
解决办法
1479
查看次数

php类型比较背后的基础哲学

所以php网站上有这个页面显示比较不同值的结果:

http://php.net/manual/en/types.comparisons.php

这是一个有用的参考,但每次我想确保我正在进行类型比较时,我宁愿不必访问此页面.所以我的问题是

在PHP的类型比较逻辑背后是否存在某种潜在的哲学/推理?

例如,我可以看到松散的比较:

  • 1,-1,"1"和"-1"可以视为TRUE 0和"0"可以视为FALSE;
  • 比较数字的字符串值与数字本身的比率为TRUE;

但是在尝试建立模式时,它变得有点毛茸茸.

php comparison types boolean-operations

5
推荐指数
1
解决办法
563
查看次数

使用正则表达式匹配两个字符串之间的字符串

如何使用正则表达式来匹配两个字符串之间的文本,其中这两个字符串本身包含两个其他字符串,内部和外部封闭字符串之间有任何数量的文本?

例如,我有这样的文字:

外部开始一些文本内部开始 文本 - 我想要 内部更多的文本外端

在这种情况下,我想要的是我想要的文本,因为它位于内部开始内部之间,它们本身位于外部开始外部之间.

如果我有

一些文本内部开始 文本 - 我想要 内部更多的文本外端

然后我不想要我想要的文本,因为虽然它在内部开始内部之间,但是没有外部开始包含这些字符串.

同样,如果我有

外部开始一些文本文本 - 我想要 内部更多的文本外端

然后,我不想要我想要的文本,因为没有封闭的内部开始,尽管有封闭的外部开始外部字符串.

假设外开始,内开始,内端外端将仅用于封闭/分隔的目的.

我认为我可以通过执行两次正则表达式匹配来完成此操作,即查找外部开始外部端之间的任何数据,然后在该数据中查找内部开始内部端之间的任何文本(如果确实那些字符串存在),但我想知道它是否可以一次完成.

regex language-agnostic nested match

3
推荐指数
1
解决办法
1983
查看次数

如何编写一个powershell脚本,从文件夹中获取具有最近最后写入时间的文件?

主题行说明了一切.我也想用管子这样做.

我想我可以使用Get-ChildItem,Measure-Object和Where-Object,但Measure-Object不喜欢日期.

我是否应该有一个脚本块来循环遍历从Get-ChildItem返回的每个项目并进行比较以查看它是否是最新的?我认为应该有一个方便的PS cmdlet.

powershell

3
推荐指数
1
解决办法
368
查看次数

通过http请求调用ASP.NET Web服务方法

我想使用C#通过http POST请求调用ASP.NET Web服务(即我不想使用运行wsdl.exe生成的SoapHttpClientProtocol对象).

据我所知,这个过程包括:

  1. 创建一个HttpWebRequest对象,该对象使用该方法指向Web服务的url /方法;

  2. 创建SOAP xml信封;

  3. 使用XmlSerializer序列化我想要传递给Web方法的任何参数;

  4. 发出请求,并解析响应.

我想这样做而不必复制和使用生成的代码.

(1)看起来很简单;

(2)我不知道这里的信封是否标准,或者它应该如何改变,这取决于我呼叫的网络服务方法.我想如果服务需要,我可能需要添加自定义soap标头?

(3)这样做的过程是什么?我认为我需要做这样的事情:

MyClass myObj;
XmlSerializer ser = new XmlSerializer(myObj.GetType());
TextWriter writer = new StringWriter();
ser.Serialize(writer, myObj);
string soapXml = writer.ToString();
writer.Close();
Run Code Online (Sandbox Code Playgroud)

另外,我想我应该将soapXml添加到soap:Body元素中

(4)我相信我应该提取和反序列化soap:Body元素的内容.可以使用(3)中的过程的反向吗?

谢谢,

K.

c# asp.net soap web-services

2
推荐指数
1
解决办法
9838
查看次数

如何创建使用正则表达式替换文本中的字符串的PowerShell脚本

我有一个像这样的字符串:

"Item 1","Item 2"

我想使用powershell脚本替换它,使它看起来像这样:

Item 1{tab character}Item 2

我有这个:

$text = '"Item 1","Item 2"'
$expr1 = '"([^"]+?)","([^"]+?)"'
$expr2 = "$1\t$2"
$line = [System.Text.RegularExpressions.Regex]::Replace($text, $expr1, $expr2);
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

顺便说一句,对于如何处理Powershell中的转义引号和特殊字符,是否有明确的参考?我发现它确实令人困惑.

.

.

编辑:

我想这样做的原因是我可以将它包装在参数化脚本中并使用参数调用它.脚本(regex-rs.ps1)是这样的:

param
(
    [string] $text,
    [string] $inputPattern,
    [string] $replacePattern
)

function Main()
{
    $text2 = [System.Text.RegularExpressions.Regex]::Replace($text, $inputPattern, $replacePattern);
    [System.Console]::WriteLine($text2);
}

Main;
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我这样调用脚本时:

powershell .\regex-rs.ps1 '"Text1","Text2"' '`"([^`"]+?)`",`"([^`"]+?)`"' '`$1`t`$2'
Run Code Online (Sandbox Code Playgroud)

它输出:

Text1,Text2
Run Code Online (Sandbox Code Playgroud)

换句话说,没有标签.我究竟做错了什么?

.

.

进一步编辑以响应NICK的答案:(我必须把它放在这里,因为StackOverflow中的注释格式与反引号混淆)

我在powershell调用中用双引号替换了单引号,如下所示:

powershell .\regex-rs.ps1 ""Text1","Text2"" "`"([^`"]+?)`",`"([^`"]+?)`"" "`$1`t`$2"
Run Code Online (Sandbox Code Playgroud)

但我得到了这个错误:

Missing ] at end of type token.
Run Code Online (Sandbox Code Playgroud)

还有什么想法? …

regex powershell escaping

2
推荐指数
2
解决办法
2万
查看次数