Xml 从变量(Powershell)中提取单个对象/属性

Xml 从变量(Powershell)中提取单个对象/属性,xml,powershell,variables,Xml,Powershell,Variables,我目前正在一个变量中存储多个用户的广告用户属性。然后,我需要能够提取各个属性以输入XML文件。现在我有点被卡住了,因为我不知道我是否能拿出单独的财产。我对代码了如指掌,它试图填充XML中每个变量中每个用户的所有属性,但希望显示思考过程。有没有一种方法可以调用单个属性 $base = 'ou=my users,dc=mydomain,dc=com' $date = (Get-Date).AddDays(-1) $people = get-aduser -SearchBase $base -Fil

我目前正在一个变量中存储多个用户的广告用户属性。然后,我需要能够提取各个属性以输入XML文件。现在我有点被卡住了,因为我不知道我是否能拿出单独的财产。我对代码了如指掌,它试图填充XML中每个变量中每个用户的所有属性,但希望显示思考过程。有没有一种方法可以调用单个属性

$base = 'ou=my users,dc=mydomain,dc=com'
$date = (Get-Date).AddDays(-1)

$people = get-aduser -SearchBase $base -Filter {whencreated -gt $date} -Properties * | select name,emailaddress,title -OutVariable results

foreach ($result in $results){

$name = $results.name
$email = $results.email
$title = $results.title

$xmlfile=[xml] @"
<users><user><name>$name</name><email>$email</email><title>$title</title</user></users>
"@
$base='ou=myusers,dc=mydomain,dc=com'
$date=(获取日期).AddDays(-1)
$people=get aduser-SearchBase$base-Filter{whencreated-gt$date}-Properties*|选择名称、电子邮件地址、标题-输出变量结果
foreach($result in$results){
$name=$results.name
$email=$results.email
$title=$results.title
$xmlfile=[xml]@”

$name$email$title这样做会容易得多:

$base = 'ou=my users,dc=mydomain,dc=com'
$date = (Get-Date).AddDays(-1)

$people = get-aduser -SearchBase $base -Filter {whencreated -gt $date} -Properties * | select name,emailaddress,title -OutVariable results

$xmlfile= $people | ConvertTo-Xml
<users>
  <user>
    <name>Matt</name>
    <email>address@mail.com</email>
    <title>Awesome</title>
  </user>
  <user>
    <name>Michael</name>
    <email>address2@mail.com</email>
    <title>Guy</title>
  </user>
</users>
无论如何,您的foreach部分也是错误的,您正在调用不存在的
foreach($result in$results)
,您的数组名为
$people
,而且您的
电子邮件
定义是错误的,应该是
电子邮件地址

foreach ($result in $people){

$name = $result.name
$email = $result.emailaddress
$title = $result.title

[xml]$xmlfile...
}
要获取InnerXml,请执行以下操作:

$xmlfile.InnerXml

我试图在这里找到一种尽可能多地使用xml过程和方法的方法,以遵循创建此文件的正确方法。希望有人有更好的方法,但它得到了我认为您想要的结果

# Base XML
$xml = [xml]@"
<users>
</users>
"@

# Template for creating nodes. 
$userTemplate = @"
<user>
    <name>{0}</name>
    <email>{1}</email>
    <title>{2}</title>
</user>
"@

$base = 'ou=my users,dc=mydomain,dc=com'
$date = (Get-Date).AddDays(-1)

Get-ADUser -SearchBase $base -Filter {whencreated -gt $date} -Properties emailaddress,title | select name,emailaddress,title| ForEach-Object{
    # Create and append a child for each user
    $child = $xml.ImportNode(([xml]($userTemplate -f $_.Name,$_.emailaddress,$_.title)).DocumentElement,$true)
    $xml.documentelement.AppendChild($child) | Out-Null
}

# Should use your own path and a variable here. 
$xml.Save("c:\temp\text.xml")
#基本XML
$xml=[xml]@”
"@
#用于创建节点的模板。
$userTemplate=@”
{0}
{1}
{2}
"@
$base='ou=myusers,dc=mydomain,dc=com'
$date=(获取日期).AddDays(-1)
Get-ADUser-SearchBase$base-Filter{whencreated-gt$date}-属性emailaddress,title |选择名称,emailaddress,title | ForEach对象{
#为每个用户创建并附加一个子项
$child=$xml.ImportNode(([xml]($userTemplate-f$\.Name,$\.emailaddress,$\.title)).DocumentElement,$true)
$xml.documentelement.AppendChild($child)| Out Null
}
#应该在这里使用您自己的路径和变量。
$xml.Save(“c:\temp\text.xml”)
您保存的文件现在应如下所示:

$base = 'ou=my users,dc=mydomain,dc=com'
$date = (Get-Date).AddDays(-1)

$people = get-aduser -SearchBase $base -Filter {whencreated -gt $date} -Properties * | select name,emailaddress,title -OutVariable results

$xmlfile= $people | ConvertTo-Xml
<users>
  <user>
    <name>Matt</name>
    <email>address@mail.com</email>
    <title>Awesome</title>
  </user>
  <user>
    <name>Michael</name>
    <email>address2@mail.com</email>
    <title>Guy</title>
  </user>
</users>

马特
address@mail.com
真棒
迈克尔
address2@mail.com
家伙

ConvertTo Xml
不会给他他想要的模式。除非这是可以接受的。谢谢你的建议。我没有使用ConvertTo Xml的原因是因为Xml必须是我原始帖子的格式。你是为每个用户创建一个文件还是在一个文件中为多个用户创建一个文件?我认为这两种方式都可以实现。Ide将一个xml文件与多个用户联合起来,以返回API。谢谢,Matt。这创建了我需要的xml文件。