小编Mat*_*sen的帖子

用于删除XML元素的PowerShell脚本

我有一个XML文档,如下所示:

<Task>
    <Settings>
    </Settings>
    <Sub>foo</Sub>
    <Body>bar</Body>
</Task>
Run Code Online (Sandbox Code Playgroud)

从PowerShell我可以愉快地使用以下内容获取'Sub'和'Body'的内容:

$Body = $XMLFile.Task.Body
Run Code Online (Sandbox Code Playgroud)

但我试图完全删除'Sub'和'Body'标签,因此XML将是:

<Task>
    <Settings>
    </Settings>
</Task>
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多东西,包括:

  • 使用该.RemoveChild()方法(抛出与Object引用相关的exeption)
  • 使用XPath语句删除并添加管道以在一行中删除
  • 甚至将文件作为文本文件打开并尝试:

    Get-Content $_.FullName -notmatch "<Sub>" | out-file $_.FullName

^^这什么都不做

此外,对于此脚本应用程序,我将无法使用任何第三方模块

xml powershell xpath

4
推荐指数
1
解决办法
1万
查看次数

通过Powershell从zip中提取某个文件似乎不会查看子文件夹

我是Powershell的新手,尤其是Powershell和ZIP文件.我想从传递的zip文件中解压缩一个特定的文件.为此,我有以下代码.下面的代码应该*.update从zip 获得.

我遇到的问题是特定文件在另一个文件夹中.运行脚本时,它似乎不会在zip文件夹中查找更多文件.

我已经在$ item上尝试了GetFolder,并且/或者通过$ item尝试了foreach.到目前为止没有成功.任何人都有想法或指导的方向?

function ExtractFromZip ($File, $Destination) {
    $ShellApp = new-object -com shell.application
    $zipFile = $ShellApp.NameSpace($File)
    foreach($item in $zipFile.Items())
    {
        Write-Host $item.Name

        if ($item.GetFolder -ne $Null) {
            Write-Host "test"
        }

        if ($item.Name -like "*.update") {
            $ShellApp.Namespace($Destination).copyhere($item)
            break;    
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

powershell zip

4
推荐指数
1
解决办法
7385
查看次数

打开新的 powershell 控制台并运行命令

我想在我的脚本中添加一行,打开一个新的 Power Shell 控制台并在新窗口中运行 ping 命令。

powershell command-line

4
推荐指数
1
解决办法
6580
查看次数

powershell从表中提取值

我对 Powershell 还很陌生,这花了太多时间,所以请帮忙!(请)

我有一个脚本,首先从 SQL Server 表中提取一个值。该提取通过以下方式填充“表”来工作:

$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是从 中获取单个值$DataSet。该值是我需要的日期时间戳。引用$DataSet.Tables[0]显示了标题为 Column1 的日期时间戳。我尝试过各种类型的转换、ToString() 等。结果要么是数据类型的显示(例如System.Data.DataRow),要么显示任意数量的错误。如何将值放入被识别为日期时间的变量中?

TIA,

约翰

sql-server powershell datetime extract server

4
推荐指数
1
解决办法
2万
查看次数

为什么powershell坚持18小于9?

截图

为什么这会成真?(获取日期现在设置为18 ...)是否可能采用Get-Date格式化数字的方式?我很难过......

powershell

4
推荐指数
2
解决办法
86
查看次数

Powershell将字符串转换为数组

我该如何改变:

$Text = "Apple Pear Peach Banana"
Run Code Online (Sandbox Code Playgroud)

$Text = @("Apple", "Pear", "Peach", "Banana")
Run Code Online (Sandbox Code Playgroud)

我计划将数组提供给foreach循环.提示用户输入水果,其间有空格(我将Read-Host用于此).那么我需要将空格分隔的字符串转换为foreach循环的数组.

谢谢...

arrays string powershell foreach

4
推荐指数
2
解决办法
9179
查看次数

Windows Powershell 在网络适配器上设置 IP 地址

我需要能够带上我的笔记本电脑并插入多个位置的多个不同网络。每个网络都要求我使用一个静态地址。我目前有一个 shell 脚本,提示输入网络位置并使用 netsh 设置 IP 地址。但是,Microsoft 警告说他们可能会删除 netsh 并使用 Powershell,因此我尝试在 Powershell 中重新创建我的脚本。

我遇到的问题是,如果我从 dhcp 转到静态地址,我可以使用:

New-NetIPAddress -InterfaceAlias $myAdapter -AddressFamily IPv4 10.1.2.3 -PrefixLength 24 -Type Unicast -DefaultGateway 10.1.2.1
Run Code Online (Sandbox Code Playgroud)

但是,当使用 New-NetIPAddress 从一个静态地址到另一个静态地址时,只需向适配器添加另一个 IP 地址(而且我无法连接到任何东西,因为它似乎只使用第一个 IP 地址)。为了解决这个问题,我可以使用 Set-NetIPAddress,但这似乎不接受 -DefaultGateway 参数,因此我分配了新地址,但使用了旧网关。我尝试使用 Remove-NetIPAddress,但这似乎保留了网关参数,因此 New-NetIPAddress 命令失败并显示“Instance DefaultGateway already exists”。如何删除网关以便我可以使用 New-NetIPAddress 重新开始或在使用 Set-NetIPAddress 时替换网关?

windows powershell networking

3
推荐指数
1
解决办法
6594
查看次数

仅使用 powershell,对 300 行的文本文件进行排序,首先按字符串长度排序,然后在达到该长度后,将它们全部按字母顺序设置

我正在尝试将其作为 powershell 中的单行代码来执行,以便我可以继续根据检查字符串检查这些字符串。我遇到的麻烦是,无论我做什么,我都只能通过字符串长度进行设置。

以下尝试未能获得所需的结果。一个文本很好,另一个成功。我也试过用管道输入它们,但我相信它们都不接受管道输入。

感谢您的帮助,因为我是 powershell 的新手。

PS C:\Users\IEUser> Get-Content Desktop/dict.txt | Sort-Object 
PS C:\Users\IEUser> Get-Content Desktop/dict.txt | Sort-Object -Property Length 
Run Code Online (Sandbox Code Playgroud)

powershell

3
推荐指数
1
解决办法
71
查看次数

Powershell 读取文件中的文本等待找到然后继续

我正在开发一个跨远程服务器启动某些服务的过程,但是服务器 2 无法启动,直到在服务器 1 日志中找到消息,服务器 3 才能启动,直到服务器 2 中找到相同的消息,等等。

我的问题是,是否可以在“循环”中读取文件,并且在找到该消息之前不继续进行初始循环(然后继续前进)?我想我可以在下面做,但是,虽然它确实识别出日志文件中的字符串已找到,但它只是重复找到它,直到内置计时器完成然后向前移动。因此,该过程将类似于“读取此文件,如果找到字符串,则继续前进。如果未找到字符串,则等待 30 秒并重新扫描文件。如果找到,则继续前进,如果未找到,则再等待 30 秒,然后重新扫描(我可以连续重复)< 执行此操作,直到找到字符串。示​​例:在此处输入图像描述

任何建议将不胜感激,因为我认为我可能会从错误的角度来处理这个问题......

-- 我省略了此脚本之前的大部分脚本,只包含 If/Else 语句,因为这是它检查文件的地方。

$SEL = Select-String -Path \\$Server\$RootDir\folder\anotherfolder\A-Log-File.log -Pattern "Switching to status: STARTED"
if ($SEL -ne $null)
{
    Write-Host "FOUND: Switching to status: STARTED" -ForegroundColor Yellow -BackgroundColor DarkGreen
}
else
    {
        Write-Host **** Waiting 60 seconds for cache to build ****
            [int]$Time = 60
            $Lenght = $Time / 100
            For ($Time; $Time -gt 0; $Time--) {
            $min = [int](([string]($Time/60)).split('.')[0])
            $text = " …
Run Code Online (Sandbox Code Playgroud)

powershell

3
推荐指数
1
解决办法
1002
查看次数

如果 2 秒后没有结果,则转到下一个命令

我有大量的 PC 号码列表(大约 2000+-),我使用以下命令进行查询:

$Computers = get-content = "C:\Users\Public\Documents\CSV\tfiles\Computernames.txt"

foreach ($Computer in $Computers) {
    query user /server:$Computer
}
Run Code Online (Sandbox Code Playgroud)

我想知道如果 2 秒后没有 PC 名称结果,我是否可以通过跳过命令来加快此过程。

也欢迎其他更快的方法。

powershell performance

3
推荐指数
1
解决办法
151
查看次数