Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell:如何将$env:HOSTNAME/$env:Computer)作为文本替换的一部分插入到文本文件中?_Powershell_Text_Replace - Fatal编程技术网

PowerShell:如何将$env:HOSTNAME/$env:Computer)作为文本替换的一部分插入到文本文件中?

PowerShell:如何将$env:HOSTNAME/$env:Computer)作为文本替换的一部分插入到文本文件中?,powershell,text,replace,Powershell,Text,Replace,对于在工作站上运行的应用程序,我有一个很长的自定义应用程序配置文件,其中有些文本元素必须在不同的系统之间手动更改 这个脚本是为了让我的生活更轻松- $content = Get-Content("C:\file.text") $content = $content.replace("%DoTheThing?%","TRUE") $content = $content.replace("%Place%","SpecificPlace") $content = $content.replace("%

对于在工作站上运行的应用程序,我有一个很长的自定义应用程序配置文件,其中有些文本元素必须在不同的系统之间手动更改

这个脚本是为了让我的生活更轻松-

$content = Get-Content("C:\file.text")
$content = $content.replace("%DoTheThing?%","TRUE")
$content = $content.replace("%Place%","SpecificPlace")
$content = $content.replace("%SystemName%",$env:HOSTNAME)
$content = Set-Content("C:\file.text")

当我执行脚本时,第一个文本项被正确替换,第三个文本项被删除,而不是被替换。作为Power Shell的新手,我该如何更正此问题?以使实际的系统名替换%SystemName%部分

问题在于
$env:HOSTNAME
不是有效的环境变量。
要获取所有环境变量的列表,可以运行
get ChildItem Env:

$Env:COMPUTERNAME
应该可以做到这一点,因此将其更改为:

$content = Get-Content("C:\file.text")
$content = $content.replace("%DoTheThing?%","TRUE")
$content = $content.replace("%Place%","SpecificPlace")
$content = $content.replace("%SystemName%",$Env:COMPUTERNAME)
$content = Set-Content("C:\file.text")

总而言之,以下是三种可能的方法,可以在您的
replace
通话中使用它们来获取当前计算机名:

使用旧的CMD实用程序:

hostname
$content = $content.replace("%SystemName%","$(hostname)")
$Env:ComputerName
$content = $content.replace("%SystemName%",$Env:COMPUTERNAME)
[System.Net.Dns]::GetHostName()
$content = $content.replace("%SystemName%",[System.Net.Dns]::GetHostName())
使用本地环境变量:

hostname
$content = $content.replace("%SystemName%","$(hostname)")
$Env:ComputerName
$content = $content.replace("%SystemName%",$Env:COMPUTERNAME)
[System.Net.Dns]::GetHostName()
$content = $content.replace("%SystemName%",[System.Net.Dns]::GetHostName())
使用.Net DNS类对象和给定方法获取主机名:

hostname
$content = $content.replace("%SystemName%","$(hostname)")
$Env:ComputerName
$content = $content.replace("%SystemName%",$Env:COMPUTERNAME)
[System.Net.Dns]::GetHostName()
$content = $content.replace("%SystemName%",[System.Net.Dns]::GetHostName())

所以我选择了另一条路线来完成我的任务。我尝试了所有先提交的方法,然后偶然发现System.IO.File方法非常有效:

$ConfigPath = "C:\FOLDER\APP\VER\File.CONFIG"

$LoadFromConfig = 
[System.IO.File]::ReadAllText($ConfigPath).Replace("%LOAD_FROM_CONFIG%","TRUE")
[System.IO.File]::WriteAllText($ConfigPath,$LoadFromConfig)

$DestinationCode = 
[System.IO.File]::ReadAllText($ConfigPath).Replace("%Destination_Code%","BBB")
[System.IO.File]::WriteAllText($ConfigPath,$DestinationCode)

$KioskID =  
[System.IO.File]::ReadAllText($ConfigPath).Replace("%KIOSK_ID%",$Env:COMPUTERNAME)
[System.IO.File]::WriteAllText($ConfigPath,$KioskID)

$Env:HOSTNAME
不是环境变量。试试
$Env:COMPUTERNAME
你能解释一下第三个选项吗?[System.Net.Dns]是一个.Net类。由于Powershell构建在.NET上,因此可以在Powershell中使用.NET类。对于.NET类,可以调用类上的方法。所以基本上你说,我想使用类[System.Net.Dns],在这个类上你想使用GetHostName方法来获取主机名。哦,对不起,我不知道它们是自我解释的。几分钟后将进行编辑。我是power shell的新手,我想这是我的错。我知道系统名称,但我希望能够插入script元素以从系统中提取系统名称,并替换配置文件中的文本(记录在案,它是一个XML文件)。。。这样我就不必每次需要更改时都手动执行。