这是一个非常荒谬的问题;该脚本的目的是扫描以某些东西开头的计算机的域。然后检查计算机的组成员身份,并为不属于特定组的计算机提供结果。然后发电子邮件。但这是我遇到问题的地方。我试图将我的if
声明中的信息发送到电子邮件中。但为了简单起见,我现在只想将其输出到文件中。
这就是我所拥有的:
# Load the Microsoft Active Directory Module
Import-Module ActiveDirectory
# Get a list of computers that begin with Funk
$Computers = Get-ADComputer -filter "name -like 'Funk*'" | ForEach-Object {$_.Name}
# Identify which computers do not have "XYZGroup" group
$Group = "XYZGroup"
$Groupname = (Get-ADGroup $Group).distinguishedName
ForEach ($adcomputer in ($computers))
{
If ((Get-ADComputer $adcomputer -Properties MemberOf | Select -ExpandProperty MemberOf) -notcontains $Groupname)
{
"Group is not present for $adcomputer"
}
}
正如您所看到的,我目前没有任何内容可以实际输出数据。有什么输入?感谢
答案 0 :(得分:0)
如何将数据输出到文件中的问题是什么?
其中一种方法是附加>> filename.fileextension 到你想输出的任何东西
抬头不会完全覆盖文件,它会将你选择的任何内容附加到文件的内容中。
例如:
# Load the Microsoft Active Directory Module
Import-Module ActiveDirectory
# Get a list of computers that begin with Funk
$Computers = Get-ADComputer -filter "name -like 'Funk*'" | ForEach-Object {$_.Name}
# Identify which computers do not have "XYZGroup" group
$Group = "XYZGroup"
$Groupname = (Get-ADGroup $Group).distinguishedName
ForEach ($adcomputer in ($computers))
{ If ((Get-ADComputer $adcomputer -Properties MemberOf | Select -ExpandProperty MemberOf) -notcontains $Groupname)
{
"Group is not present for $adcomputer" >> result.txt
}
}
答案 1 :(得分:0)
好主人,你自己也在努力。首先,你得到所有这些电脑'对象两次。不要这样做,只是不要丢弃第一个查询的所有有用信息。或者更好的是,过滤第一个查询,并且只获取您真正想要的计算机。看看这个:
Import-Module ActiveDirectory
$Group = "XYZGroup"
$Groupname = (Get-ADGroup $Group).distinguishedName
$Computers = Get-ADComputer -filter "name -like 'Funk*'" -Prop MemberOf| Where{$_.MemberOf -notcontains $Groupname}
$computers |Select -Expand Name|Out-File 'C:\Path\To\Output.txt'
ForEach($Computer in $Computers){
Send-MailMessage -From Me@company.com -To Someone@company.com -Subject "Rogue Computer!" -Body "$Computer is not in $Groupname"
}
现在,您需要调整send-mailmessage cmdlet行,但这听起来像是您想要的所有内容。
编辑:好的,要获得所有可以执行此类操作的计算机:
$CompList = $computers.name -join ", "
这给你' Computer1,Computer2,Computer3'作为一个字符串。或者如果你想要每行一个,你可以使用
$CompList = $computers.name -join "`n"
这会产生一个多行字符串,如:
Computer1
Computer2
Computer3
关于这一点的好处是,在发送电子邮件时,您只需执行以下操作:
Send-MailMessage -To Somebody@example.com -from me@example.com -subject "Computers not in $groupname" -Body "$CompList"
并且正文只是每行一个计算机名称列表,便于复制/粘贴或其他任何内容。