阻止 Powershell XML 文件更新将输出发送到命令行? [英] Prevent Powershell XML file updates from sending output to command line?

查看:64
本文介绍了阻止 Powershell XML 文件更新将输出发送到命令行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在网上找到了这个功能,它根据我从 CSV 文件提供的值更新 IIS web.config XML 文件.我想防止在执行函数时打印每个 XML 条目修改的输出.我已经多次尝试使用 Out-Null,但我似乎无法找到这个 XML 更新函数的哪个部分导致输出.

I have this function I found online which updates an IIS web.config XML file based on values I am feeding it from CSV files. I would like to prevent the output of every XML entry modification from being printed when the function is executed. I have tried numerous times to place to utilize Out-Null but I cannot seem to locate which portion of this XML update function is causing the output.

我想删除为 D:\Inetpub\WWWRoot\test"设置 web.config appSettings 行之后的所有 XML 更新输出,如下所示.输出似乎是函数从 CSV 文件中读取并更新 web.config 文件的键/值对.

I would like to remove all XML update output like shown below after the line "Setting web.config appSettings for D:\Inetpub\WWWRoot\test". The output seems to be the key/value pair the function is reading from the CSV file and updating the web.config file with.

为 D:\Inetpub\WWWRoot\test 设置 web.config appSettings#文本----- 允许帧为真

Setting web.config appSettings for D:\Inetpub\WWWRoot\test #text ----- allowFrame TRUE

身份验证类型 SSO

cacheProviderType 共享

cacheProviderType Shared

这是我正在使用的功能:

Here is the function I am utilizing:

function Set-Webconfig-AppSettings
{
    param (
        # Physical path for the IIS Endpoint on the machine without the "web.config" part.
        # Example: 'D:\inetpub\wwwroot\cmweb510\'
        [parameter(mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String] $path,
 
        # web.config key that you want to create or change
        [parameter(mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String] $key,
 
        # Value of the key you want to create or change
        [parameter(mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String] $value
    )
 
   Write-Host "Setting web.config appSettings for $path" -ForegroundColor DarkCyan
 
    $webconfig = Join-Path $path "web.config"
    [bool] $found = $false
 
    if (Test-Path $webconfig)
    {
        $xml = [xml](get-content $webconfig);
        $root = $xml.get_DocumentElement();
 
        foreach ($item in $root.appSettings.add)
        {
            if ($item.key -eq $key)
            {
                $item.value = $value;
                $found = $true;
            }
        }
 
        if (-not $found)
        {
            
            $newElement = $xml.CreateElement("add");
            $nameAtt1 = $xml.CreateAttribute("key")
            $nameAtt1.psbase.value = $key;
            $newElement.SetAttributeNode($nameAtt1);
 
            $nameAtt2 = $xml.CreateAttribute("value");
            $nameAtt2.psbase.value = $value;
            $newElement.SetAttributeNode($nameAtt2);
 
            $xml.configuration["appSettings"].AppendChild($newElement);
        }
        
        $xml.Save($webconfig)
    }
    else
    {
        Write-Error -Message "Error: File not found '$webconfig'"
    }
}

推荐答案

SetAttributeNode 和 AppendChild 都输出信息所以我们只需要 $null[void] 那些出来

Both SetAttributeNode and AppendChild output information so we just need to $null or [void] those out

function Set-Webconfig-AppSettings
{
    param (
        # Physical path for the IIS Endpoint on the machine without the "web.config" part.
        # Example: 'D:\inetpub\wwwroot\cmweb510\'
        [parameter(mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String] $path,

        # web.config key that you want to create or change
        [parameter(mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String] $key,

        # Value of the key you want to create or change
        [parameter(mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String] $value
    )

   Write-Host "Setting web.config appSettings for $path" -ForegroundColor DarkCyan

    $webconfig = Join-Path $path "web.config"
    [bool] $found = $false

    if (Test-Path $webconfig)
    {
        $xml = [xml](get-content $webconfig);
        $root = $xml.get_DocumentElement();

        foreach ($item in $root.appSettings.add)
        {
            if ($item.key -eq $key)
            {
                $item.value = $value;
                $found = $true;
            }
        }

        if (-not $found)
        {
        
            $newElement = $xml.CreateElement("add");
            $nameAtt1 = $xml.CreateAttribute("key")
            $nameAtt1.psbase.value = $key;
            $null = $newElement.SetAttributeNode($nameAtt1);

            $nameAtt2 = $xml.CreateAttribute("value");
            $nameAtt2.psbase.value = $value;
            $null = $newElement.SetAttributeNode($nameAtt2);

            $null = $xml.configuration["appSettings"].AppendChild($newElement);
        }
    
        $xml.Save($webconfig)
    }
    else
    {
        Write-Error -Message "Error: File not found '$webconfig'"
    }
}

这篇关于阻止 Powershell XML 文件更新将输出发送到命令行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆