【发布时间】:2014-03-10 15:42:44
【问题描述】:
我正在编写一个 PS 脚本,该脚本对主机名是文件中的一行的每台机器执行以下操作
- 停止服务
- 检查 .ini 文件中的端口号
- 根据现有值有条件地更新端口号
- 启动服务
我很难理解第 3 步的语法: 如果“ServerPort=443”,将其更改为“ServerPort=444” ElseIf 'ServerPort=444',将其更改为 'ServerPort=443'
这是我目前所处的位置:
$servers = Get-Content 'C:\Servers.txt'
foreach ($server in $servers){
# stop service and wait.
(get-service -ComputerName $server -Name SERVICENAME).stop
# Logic to see string. Looking for "ServerPort=%". Detect if Server port is 444 or 443. If one, set to other
# Get Port from config file
$port = get-content C:\config.ini | Where-Object {$_ -like 'ServerPort=*'}
# Conditionally update port
IF ($port -eq "ServerPort=443")
{
# update to 444
}
ELSEIF ($port -eq "ServerPort=444")
{
# update to 443
}
ELSE
{
Write-Host "Value not detected within Param"
}
#start service
(get-service -ComputerName $server -Name SERVICENAME).start
}
根据我在这里所做的,我认为语法必须重新打开文件,重新搜索该行然后更新它......通过网络时效率很低......也许有一个更合乎逻辑和简单的方法来解决这个问题?
非常感谢您的帮助!
-韦斯
【问题讨论】:
-
您不能就地更新文件中的行。你必须将文件读入一个变量,修改那里的相关行,然后用变量的内容重写整个文件。
-
您有我应该为此研究的特定功能吗?我有点犹豫要不要重写整个文件。
-
文件不应该超过一两个 kb(希望如此),替换文件应该是没有问题的。只需将文件加载到内存,在内存中进行调整,然后将更正后的文件写回远程机器。
-
我不知道你所说的“特定功能”是什么意思。这就是文件系统的工作方式。您可以将数据附加到文件中,但您不能在不重写整个文件的情况下在文件中间进行更改。
-
配置文件总共大约 220 行。此外,我不知道如何将文件加载到内存中进行此操作?我只是将示例拼凑在一起来构建我的脚本:D
标签: powershell windows-services windows-server-2008-r2