动态创建主机文件

Dynamically Create Host File

抱歉新手 powersehell 如果我问了一个愚蠢的问题请原谅我。

我正在尝试根据本地网站上的新用户动态创建主机文件。我是 运行 一个 Get-IISSites 针对我们的登台 WWW 服务器并将它们输入到一个数组中。例如,我是 运行 安装了 iis 的测试虚拟机

    $Array = @()
$Websites = Get-IISSite | Select-Object name, ID

foreach($WB in $Websites)
{
    If($WB.ID -gt 1)
    {
        $Array += New-Object psobject -property @{'name' = $WB.name}
    }
}

这是输出

Test1.mav359.co.uk  
test2.mav359.co.uk  
test3.mav359.co.uk  
test4.mav360.co.uk

如您所见,有两个域,我需要完成两件事

首先我需要将每个站点重命名为 test1-local。mav359.co.uk 并且我想将基于域的 IP1 或 IP2 添加到行的末尾,这些将在以后替换基于生成的 IP 和分配给针对本地 PC 生成的变量

Test1-local.mav359.co.uk    IP1
test2-local.mav359.co.uk    IP1
test3-local.mav359.co.uk    IP1
test4-local.mav360.co.uk    IP2

我正在努力了解如何处理数组中的数据(或者这是否是最好的方法)。我正在考虑做一个

foreach 包含添加 ip1 或包含添加 ip2 我不知道 to/can 你如何使用通配符来 search/replace *.mav359.co.uk 和 *.-local.mav359.co.uk 同时保留行的原始部分

再次了解所有这些,所以请提供一些帮助或指明方向,数组是错误的方法吗?

欢迎任何帮助

根据您是否希望输出为 objects 数组,您稍后需要在主机文件中组合为字符串,您可以这样做

$Array = Get-IISSite | ForEach-Object {
    # $_ is an automatic variable and represents one object of each iteration
    if ($_.ID -gt 1) {
        # output an object to be collected in variable `$Array`
        [PsCustomObject]@{
            Name = $_.Name -replace '^(\w+\d+)', '-local'
            IP   = if ($_.Name -like '*mav359*') { 'IP1' } else { 'IP2' }
        }
    }
}

$Array

结果:

Name                      IP
----                      --
Test1-local.mav359.co.uk  IP1
test2-local.mav359.co.uk  IP1
test3-local.mav359.co.uk  IP1
test4-local.mav360.co.uk  IP2

但是,如果您想要获取格式化的 字符串数组 以在主机文件中使用,请使用:

$Array = Get-IISSite | ForEach-Object {
    if ($_.ID -gt 1) {
        '{0}    {1}' -f ($_.Name -replace '^(\w+\d+)', '-local'),
                        $(if ($_.Name -like '*mav359*') { 'IP1' } else { 'IP2' })
    }
}

$Array

结果:

Test1-local.mav359.co.uk    IP1
test2-local.mav359.co.uk    IP1
test3-local.mav359.co.uk    IP1
test4-local.mav360.co.uk    IP2