我最近一直在尝试完成对打印机的审核。
在手动将所有信息放入excel中完成一小部分工作后,我几乎失去了理智,我决定采取不同的方法,学习如何使用powershell来节省时间和精力,并准备一个更准确的并在相当短的时间内清理文档。 我只有一个问题...90% 的信息非常准确,除了 SDDL 字符串,它非常神秘。
我了解到有一种方法可以通过 ConvertFrom-SddlString 函数来翻译它们,但输出仍然缺乏我需要的基本信息:
我试图从 SDDL 字符串实现的输出示例:“[所有人:打印;所有应用程序包:管理文档;创建者所有者:打印、管理文档;AdminY:打印、管理文档、管理此打印机;AdminX:打印,管理这台打印机]”
ConvertFrom-AddlString 似乎缺少一些组,也没有告诉你一些权限。我尝试在 powershell 中手动为 sddl 字符串编写解析器,但作为 powershell 的新手,我发现自己完全迷失了。
我在互联网上搜索了一个可能能够做到这一点的函数或一些代码,但没有成功,而且我们公司内部的编程受到严重限制,所以我无法使用我所知道的任何其他编程语言来帮助我出来了。
有谁知道是否有办法以更可靠/准确的方式翻译 SDDL 字符串?
$allprintservers = (Get-ADObject -LDAPFilter "(.......)" -properties *|Sort-Object -Unique -Property servername).servername
$prntrs = @()
foreach ($printserver in $allprintservers){
$pos = $printserver.IndexOf(".")
$PrintServerName = $printserver.Substring(0, $pos)
$printers = (Get-Printer -ComputerName $PrintServerName | Where-Object {$_.Name -notlike "......."}).Name
foreach ($printer in $printers) {
if ([string]::IsNullOrWhiteSpace($printer) -or $printer -like "........."){
$printer = "null"
break
}else{
$currentprinter = Get-Printer -ComputerName $PrintServerName | Where-Object {$_.Name -like $printer}
$name = $currentprinter.Name
$location = $currentprinter.Location
$comment = $currentprinter.Comment
$driverName = $currentprinter.DriverName
$sharedName = $currentprinter.ShareName
$shared = $currentprinter.Shared
$portName = $currentprinter.PortName
$permissions = (Get-Printer -ComputerName $PrintServerName -name $name -Full).PermissionSDDL
$translation = ConvertFrom-SddlString -sddl $permissions -type ActiveDirectoryRights | Select-Object -ExpandProperty DiscretionaryAcl
$translation = [string]::join("; ",($translation.Split("`n")))
}#else
$prntr = [PSCustomObject]@{
ServerName = $PrintServerName
PrinterName = $name
Location = $location
Comment = $comment
DriverName = $driverName
SharedName = $sharedName
Shared = $shared
PortName = $portName
UnTransACL = $permissions
TransACL = $translation
}#printer_CustomObject
$prntrs += $prntr
}#Foreach 2nd
}#foreach 1st
$prntrs | Export-Csv "..\..\PrinterAudit2022.csv" -Encoding UTF8
我删除了代码中的极少数部分,以避免共享任何敏感信息,但它不应该影响代码的逻辑。
您好,Stefan,我想知道您是否最终解决了这个问题。最近一直在纠结如何准确读取打印机权限