我浏览了这个网站,似乎找不到任何适合我情况的内容。基本上,我正在尝试向 NETLOGON 文件编写一个附加内容,以替换所有用户桌面上的文本文件中的文本。当前文本全面静态。
我想要更改的文本对于每个用户来说都是唯一的。我想将当前文本 (user1) 更改为用户 AD 用户名(即 johnd、janed 等)。我使用的是 Windows Server 2008 R2,所有工作站都是 Windows 7 Professional SP1 64 位。
这是我到目前为止所尝试过的(有一些变量,但由于某种原因,这些变量都不起作用):
gc c:\Users\%USERNAME%\desktop\VPN.txt' -replace "user1",$env:username | out-file c:\Users\%USERNAME%\desktop\VPN.txt
我没有收到错误,但它也没有返回到正常的“PS C:>”提示,只是“>>>”,并且文件没有按预期更改。
如果这就是您拥有代码的方式,那么我想这是因为您有一个开始单引号而没有结束单引号。您仍然会遇到另外两个问题,并且您的代码中有一个答案。这>>>
是行继续字符,因为解析器知道代码不完整,并为您提供继续代码的选项。如果您故意在多行上编写一行代码,您会认为这是一个功能。
$path = "c:\Users\$($env:username)\desktop\VPN.txt"
(Get-Content $path) -replace "user1",$env:username | out-file $path
- 由于您调用了该路径两次,因此将路径用引号引起来并使用了变量。
-
%name%
在命令提示符中使用。 PowerShell 中的环境变量使用$env:
您在片段中曾经做过的提供商。
-
-replace
是一个正则表达式替换的工具,可以对抗Get-Content
但您需要首先捕获子表达式中的结果。
- 其次与
-replace
用于正则表达式,并且您的字符串不是基于正则表达式的,您可以使用.Replace()
以及。
-
Set-Content
通常优先于Out-File
出于性能原因。
话虽这么说...
你也可以尝试这样的事情。
$path = "c:\Users\$($env:username)\desktop\VPN.txt"
(Get-Content $path).Replace("user1",$env:username) | Set-Content $path
您只想替换第一次出现的内容吗?
您可以在此处使用一些正则表达式,并调整使用方式Get-Content
$path = "c:\Users\$($env:username)\desktop\VPN.txt"
(Get-Content $path | Out-String) -replace "(.*?)user1(.*)",('$1{0}$2' -f $env:username) | out-file $path
正则表达式将匹配整个文件。它捕获了两个组。
-
(.*?)
- 直到第一个“user1”
-
(.*)
- 之后的一切
然后我们使用格式运算符将新用户名夹在这些捕获组之间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)