创建可由域内所有机器写入的文件的脚本

创建可由域内所有机器写入的文件的脚本

我对 powershell 还不熟悉,但我的任务是弄清楚如何在我们域中的每个工作站上创建和运行 powershell 脚本,以便它提取 Bitlocker 状态,然后将信息写入 csv 文件。我们使用 labtech 作为我们的远程系统,因此我们希望在每台机器上运行该脚本,因为我们的工程师不希望在 DC 本身上运行任何东西(最初打算从 OU 中提取所有工作站名称,然后检查每个工作站的状态)。问题是,似乎第一台运行脚本的机器会创建文件,然后取得所有权,从而有效地锁定所有其他机器,使其无法写入文件。任何能引导我朝着正确方向的建议都将不胜感激。谢谢。

$Computer = hostname
Write-Host "Getting Bitlocker Status..." -ForegroundColor Green

function ErrorLog {
    $ErrorMessage = $_.Exception.Message
    $Date = Get-Date
    $Date ERROR: "$ErrorMessage" | out-file *path* -Append 
exit
}
try
{
$Status = manage-bde C: -cn $Computer -status | Select-String "Conversion Status:", "Percentage Encrypted:", "Protection Status:", "Lock Status:"
}
catch
{
    ErrorLog

}
finally
{
    $Date = Get-Date
    "$Date Successful BitLocker Check" | out-file *path* -Append
}

Write-Host "Sending info to CSV file..." -ForegroundColor Green

try{
    $ConvStatus = $Status.line | Select-String "Conversion Status:"
    $Percentage = $Status.line | Select-String "Percentage Encrypted:"
    $LockStatus = $Status.line | Select-String "Lock Status:"
    $Object = New-Object PSObject -Property @{
        ComputerName = $Computer
        ConversionStatus = $ConvStatus.ToString().trim("Conversion Status:")
        PercentageEncrypted = $Percentage.ToString().trim("Percentage Encrypted:")
        LockStatus = $LockStatus.ToString().trim("Lock Status:")
}

    $Object | Select-Object ComputerName, ConversionStatus, PercentageEncrypted, LockStatus | Export-CSV *path* -NoTypeInformation -Append -Force
}

catch {
    ErrorLog
}
finally
{
    $Date = Get-Date
    "$Date CSV written to $Path" | out-file *path* -Append

}

答案1

让所有计算机同时写入同一个文件并不是一个好的解决方案。从域中的一台中央计算机查询所有工作站的 Bitlocker 状态会更好。

要使用的命令是 管理bde,例如用作:

manage-bde -status -computername WS12345 C:

这可能会产生以下输出:

图像

您可以编写一个脚本,将信息收集到一个 CSV 文件中。

参考 :

答案2

您可以简单地调用 icacls 来向所有人授予完全访问权限:

icacls myfile.csv /grant everyone:F

注意每个人取决于语言环境,因此如果您不使用英语,则应使用其他名称。

以下是文章描述了如何用 Powershell 方式执行此操作。它有点长,在这种情况下,我自己更喜欢上面的一行代码。我对该页面中的示例进行了一些修改:

$Path = 'myfile.csv'
$Acl = (Get-Item $Path).GetAccessControl('Access')
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule('Everyone', 'FullControl', 'Allow')
$Acl.SetAccessRule($Ar)
Set-Acl -path $Path -AclObject $Acl

顺便问一下,您是否考虑过如果两台电脑同时写入该文件会发生什么?

答案3

我成功说服了我们的工程师做出一些更改,现在我已成功通过我们的 UTIL 服务器运行我的原始脚本。感谢大家的帮助!

相关内容