这是对我之前的问题的回应:
PowerShell:-replace,regex和($)美元符号问题
我的问题是:为什么这两行代码有不同的输出:
'abc' -replace 'a(\w)', '$1'
'abc' -replace 'a(\w)', "$1"
Run Code Online (Sandbox Code Playgroud)
并根据下面的2篇文章,为什么单引号中的变量'$ 1'不能用作文字字符串?单引号中的所有内容都应被视为文字文本字符串,对吧?
http://www.computerperformance.co.uk/powershell/powershell_quotes.htm
http://blogs.msdn.com/b/powershell/archive/2006/07/15/variable-expansion-in-strings-and-herestrings的.aspx
我希望能够打开和关闭键盘上的"Num Lock"键.我在网上尝试过多个例子,但没有成功.这是我最接近解决方案的事情:
[void] [System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")
[System.Windows.Forms.SendKeys]::SendWait("{NUMLOCK}")
Run Code Online (Sandbox Code Playgroud)
上面的代码看起来可能有效,我看到键盘上的"Num Lock"指示灯闪烁了一秒钟,但它并没有"粘住".
我刚刚从 VS2010 升级到 VS2013,现在偶尔我会在一些选项卡中看到一个数字:

我搜索了 Google、MSDN 和此处,但没有找到答案。
知道这些数字意味着什么吗?
我的研究:
好的,我已经查看了几十个例子Write-Progress并观察了以下内容.大部分时间与循环结合使用,通常是"for"或"foreach".大多数示例不做任何事情,但计数为100.其他更有用的示例将执行某个命令,例如复制文件.没有示例包含整个脚本.
我的设置:
我有几个脚本(数千行代码)在某些时候相互调用.一个脚本控制或调用所有其他脚本.该脚本运行大约15分钟,在此期间我想提供状态使用Write-Progress.
我的问题:
在我的Write-Progress所有脚本执行时如何使用提供状态?基本上我想"包装" Write-Progress我的所有脚本或者是从单个脚本为多个被调用脚本提供状态的最佳方法.
最好的例子:
到目前为止,我见过的最好的用法是Update-Help在PowerShell V3中使用CmdLet.但由于我看不到Update-HelpCmdLet 的源代码,这对我没有帮助.
我几乎到处搜索,甚至不确定它是否可能,但是嘿嘿,我想我会看到你们 C# 向导可能有什么解决方案或变通方法。
特尔;博士:
我有一个使用 C# 字典的多维集合,并想指出字典中每个字符串的用途,如下所示:
private Dictionary<string: Area, Dictionary<string: Controller, string: Action>> ActionCollection;
Run Code Online (Sandbox Code Playgroud)
这当然不起作用。现在我只是在评论字典。
建议、想法、想法?
我是PowerShell的新手,来自很久以前的BASH背景.PowerShell的内置文档和Web上的帮助非常好,但是我一直磕磕绊绊的一个领域是理解方法和属性(这些被称为成员/类?).我知道我可以看到我可以使用哪些方法和属性,例如:
ls | get-member
Run Code Online (Sandbox Code Playgroud)
如何.Exists,.Trim,.SubString,或.Split等实际工作?
我正在将数千行批处理代码转换为PowerShell.我正在使用正则表达式来帮助完成这个过程.问题是代码的一部分是:
$`$2
Run Code Online (Sandbox Code Playgroud)
更换时,它只显示$2并不扩展变量.我还使用单引号替换第二部分而不是转义变量,结果相同.
$origString = @'
IF /I "%OPERATINGSYSTEM:~0,6%"=="WIN864" SET CACHE_OS=WIN864
...many more lines of batch code
'@
$replacedString = $origString -replace "(IF /I `"%)(.+)(:.+%`"==`")(.+`")(.+)","if ( $`$2 -match `"^`$4 ) {`$5 }"
$replacedString
Run Code Online (Sandbox Code Playgroud) 好吧,我已经编写了一个在Windows 8中完美运行的脚本.我切换到Windows 7并获得各种血液.经过一些调试,我发现了问题.Win 8使用PowerShell 3.0,Win 7使用PowerShell 2.0和PowerShell 3.0允许您在使用时使用双引号:
$ExecutionContext.InvokeCommand.ExpandString($var)
Run Code Online (Sandbox Code Playgroud)
由于我的代码在很多字符串使用双引号时非常依赖于此,我正在尝试找到解决方案.
Here-Strings没有用,因为我的一些字符串是这样的:
$var = 'this is a "sample" of $one of my strings'
Run Code Online (Sandbox Code Playgroud)
here-string解决方法只有在输出到文本文件时才有效,我不想要这个文本文件,因为我在函数中大量使用了这段代码.
我在微软的网站上发现了与此相关的错误.它在PowerShell 3.0中的工作方式是它最初的工作方式.此外,将Windows 7升级到PowerShell 3.0是不可能的.
好的,长时间访问者,第一次发帖.
而不是PowerShell告诉我我的正则表达式的结果是"真"或"假",而是我想要字符串.我知道有其他方法可以做到这一点,我已经有一个工作版本,但我想使用正则表达式"提取"字符串.
例如:
$ipconfig = ipconfig | select-string "IPv4" | select-object -first 1
$ipconfig -match "\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b"
Run Code Online (Sandbox Code Playgroud)
只返回"True",而不是我想要的IP地址.
有没有办法用正则表达式完成这个?
谢谢!
我有许多用于记录的脚本中使用的以下变量:
$uDate = get-date -format "ddd MM/dd/yyyy HH:mm:ss"
唯一的问题是日期永远不会刷新,只显示声明变量的日期/时间.
看起来这很简单:
class Program
{
static void Main()
{
List<string> lst = new List<string>();
lst.Add("String 1");
lst.Add("String 2");
foreach (string item in lst)
{
Console.WriteLine(lst);
}
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
然而它返回:
System.Collections.Generic.List`1[System.String]
Run Code Online (Sandbox Code Playgroud) powershell ×8
variables ×3
c# ×2
collections ×2
regex ×2
replace ×2
dictionary ×1
dollar-sign ×1
extract ×1
foreach ×1
keyboard ×1
keypress ×1
list ×1
loops ×1
methods ×1
parsing ×1
progress ×1
properties ×1
quotes ×1
refresh ×1
string ×1
tabs ×1
types ×1