我想写一个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脚本:
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是一个脚本块.
所以php网站上有这个页面显示比较不同值的结果:
http://php.net/manual/en/types.comparisons.php
这是一个有用的参考,但每次我想确保我正在进行类型比较时,我宁愿不必访问此页面.所以我的问题是
在PHP的类型比较逻辑背后是否存在某种潜在的哲学/推理?
例如,我可以看到松散的比较:
但是在尝试建立模式时,它变得有点毛茸茸.
如何使用正则表达式来匹配两个字符串之间的文本,其中这两个字符串本身包含两个其他字符串,内部和外部封闭字符串之间有任何数量的文本?
例如,我有这样的文字:
外部开始一些文本内部开始 文本 - 我想要 内部更多的文本外端
在这种情况下,我想要的是我想要的文本,因为它位于内部开始和内部之间,它们本身位于外部开始和外部之间.
如果我有
一些文本内部开始 文本 - 我想要 内部更多的文本外端
然后我不想要我想要的文本,因为虽然它在内部开始和内部之间,但是没有外部开始包含这些字符串.
同样,如果我有
外部开始一些文本文本 - 我想要 内部更多的文本外端
然后,我不想要我想要的文本,因为没有封闭的内部开始,尽管有封闭的外部开始和外部字符串.
假设外开始,内开始,内端和外端将仅用于封闭/分隔的目的.
我认为我可以通过执行两次正则表达式匹配来完成此操作,即查找外部开始和外部端之间的任何数据,然后在该数据中查找内部开始和内部端之间的任何文本(如果确实那些字符串存在),但我想知道它是否可以一次完成.
主题行说明了一切.我也想用管子这样做.
我想我可以使用Get-ChildItem,Measure-Object和Where-Object,但Measure-Object不喜欢日期.
我是否应该有一个脚本块来循环遍历从Get-ChildItem返回的每个项目并进行比较以查看它是否是最新的?我认为应该有一个方便的PS cmdlet.
我想使用C#通过http POST请求调用ASP.NET Web服务(即我不想使用运行wsdl.exe生成的SoapHttpClientProtocol对象).
据我所知,这个过程包括:
创建一个HttpWebRequest对象,该对象使用该方法指向Web服务的url /方法;
创建SOAP xml信封;
使用XmlSerializer序列化我想要传递给Web方法的任何参数;
发出请求,并解析响应.
我想这样做而不必复制和使用生成的代码.
(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.
我有一个像这样的字符串:
"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)
还有什么想法? …
powershell ×4
regex ×2
asp.net ×1
c# ×1
comparison ×1
dollar-sign ×1
escaping ×1
function ×1
match ×1
nested ×1
params ×1
php ×1
soap ×1
types ×1
web-services ×1