小编cor*_*ria的帖子

PowerShell:带有ConvertTo-XML输出的自定义属性XML标记

我在PowerShell中创建一个新对象,使用哈希表来设置属性值.我想使用ConvertTo-XML方法将对象导出为XML格式.

$hash = @{            
    Processor = 'Intel'                
    Disk = '500GB'
    Server = 'ABC'
    Serial = '01234'
}                           

$specs = New-Object PSObject -Property $hash
Write-Output ($specs | ConvertTo-XML -notypeinformation).Save("C:\scripts\export.xml")
Run Code Online (Sandbox Code Playgroud)

XML输出如下:

<Objects>
  <Object>
    <Property Name="Serial">a1b2c3</Property>
    <Property Name="Server">ABC</Property>
    <Property Name="Processor">Intel</Property>
    <Property Name="Disk">500GB</Property>
  </Object>
</Objects>
Run Code Online (Sandbox Code Playgroud)

我想要的是,XML标签的格式如下:

<Objects>
  <Object>
    <Serial>a1b2c3</Serial>
    <Server>ABC</Server>
    <Processor>Intel</Processor>
    <Disk>500GB</Disk>
  </Object>
</Objects>
Run Code Online (Sandbox Code Playgroud)

然后,如果有一个很好的解决方案,是否还有一种方法可以自定义Object(s)标签?

谢谢.

xml powershell hash psobject

9
推荐指数
1
解决办法
6164
查看次数

Python:subprocess.popen:读取每行输出

我无法逐行读取子进程输出.子进程只是将文件的内容与另一个文件进行对比.输出应该是一个两列文件,打印到stdout就好了.但是当我尝试读取每一行时,它会读取每个字符后跟\n:

#!/usr/bin/python    

import sys
import getopt
import os
import subprocess
from subprocess import Popen, PIPE, STDOUT

inputfile = ''
target = ''

try:
        opts, args = getopt.getopt(sys.argv[1:],"s:t:",['servers=', 'target='])
except getopt.GetoptError:
        print 'getopt failure: exit'
        sys.exit()

for opt, arg in opts:
        if opt in ("-s", "--servers"):
                inputfile = arg
        if opt in ("-t", "--target"):
                boxwin = arg

p1 = subprocess.Popen(["grep -f " + inputfile + " " + target + " | awk '{print $2, $1}'"], stdout=subprocess.PIPE, shell=True)

output, error = …
Run Code Online (Sandbox Code Playgroud)

python subprocess stdout

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

Powershell:永久修改路径,“不允许访问请求的注册表。”

我需要将脚本文件夹永久添加到我的 PowerShell 路径(不仅仅是特定会话)。我正在运行以下代码:

[System.Environment]::SetEnvironmentVariable("PATH", $Env:Path + ";C:\scripts", "Machine")
Run Code Online (Sandbox Code Playgroud)

错误如下:

使用“3”个参数调用“SetEnvironmentVariable”时出现异常:“不允许请求的注册表访问。”

如何获得注册表访问权限/修复此问题?

编辑:不确定它是否有帮助,但我在 Windows Server 2012 上使用 PowerCLI(VMware PowerShell API)。

registry powershell path powercli windows-server-2012

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

保存之前/之后由于CSV差异导致的错误解析(Java w/Apache Commons CSV)

我有一个37列CSV文件,我使用Apache Commons CSV 1.2在Java中解析.我的设置代码如下:

//initialize FileReader object
FileReader fileReader = new FileReader(file);

//intialize CSVFormat object
CSVFormat csvFileFormat = CSVFormat.DEFAULT.withHeader(FILE_HEADER_MAPPING);

//initialize CSVParser object
CSVParser csvFileParser = new CSVParser(fileReader, csvFileFormat);

//Get a list of CSV file records
List<CSVRecord> csvRecords = csvFileParser.getRecords();

// process accordingly
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我将要处理的CSV复制到我的目标目录并运行我的解析程序时,我收到以下错误:

Exception in thread "main" java.lang.IllegalArgumentException: Index for header 'Title' is 7 but CSVRecord only has 6 values!
        at org.apache.commons.csv.CSVRecord.get(CSVRecord.java:110)
        at launcher.QualysImport.createQualysRecords(Unknown Source)
        at launcher.QualysImport.importQualysRecords(Unknown Source)
        at launcher.Main.main(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

但是,如果我将文件复制到我的目标目录,打开并保存它,然后再次尝试该程序,它的工作原理.打开并保存CSV会添加最后所需的逗号,这样我的程序就无法获得没有足够的标题来阅读.

对于上下文,这里是保存之前/之后的示例行:

之前(失败):"数据","数据","数据","数据"

之后(工作):"数据","数据",,,"数据",,,"数据",,,,,,

所以我的问题是:为什么我打开并保存CSV格式会发生变化?我没有更改任何值或编码,保存时MS-DOS或常规.csv格式的行为是相同的.另外,我在我的测试中使用Excel来复制/打开/保存.

我需要使用一些编码或格式设置吗?我能以编程方式解决此问题吗?

提前致谢!

编辑#1:

对于其他上下文,当我第一次在原始文件中查看空行时,它只有新行^ …

java csv encoding apache-commons-csv

5
推荐指数
1
解决办法
2980
查看次数