Powershell脚本用于过滤计算机名称并检查组成员身份并保存

时间:2014-09-24 19:59:53

标签: powershell dns

这是一个非常荒谬的问题;该脚本的目的是扫描以某些东西开头的计算机的域。然后检查计算机的组成员身份,并为不属于特定组的计算机提供结果。然后发电子邮件。但这是我遇到问题的地方。我试图将我的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"
    }  
}  

正如您所看到的,我目前没有任何内容可以实际输出数据。有什么输入?感谢

2 个答案:

答案 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"

并且正文只是每行一个计算机名称列表,便于复制/粘贴或其他任何内容。