我在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)标签?
谢谢.
我无法逐行读取子进程输出.子进程只是将文件的内容与另一个文件进行对比.输出应该是一个两列文件,打印到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) 我需要将脚本文件夹永久添加到我的 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)。
我有一个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:
对于其他上下文,当我第一次在原始文件中查看空行时,它只有新行^ …