Как мне создать файл журнала (время, пользователь, который запускал скрипт и что происходит после того, как скрипт был выполнен) - PullRequest
0 голосов
/ 14 декабря 2018

Мой сценарий создает папку и запрашивает имя пользователя, затем делает 2 группы, затем спрашивает, какие пользователи должны быть в каждой группе, и дает права группам (только чтение и чтение и запись)

Теперь явыполнив это задание, мой босс просит, чтобы я все это записал ... создайте файл журнала при каждом запуске скрипта:

  • когда (дата / месяц / год)

  • who (пользователь, запустивший скрипт)

  • что (что произойдет, когда скрипт запустится)

  • где (где папки и где группы, где они сделаны)

Это мой сценарий:

Start-Transcript -Path "c:\temp\transcript.txt"

    $RW = "RW"
    $RO = "RO"

    $XG1_Filerights = $newFolderName + $RW
    $XG2_FileRights = $newfolderName + $RO   

    $path = "C:\temp\"
    $newFolderName = Read-Host -Prompt "Navngiv nye mappe"
    $newFolderFull = $path + $newFolderName
    Write-Output "Den nye mappe vil være her: $newFolderFull"
    $confirm = Read-Host "bekræfte? Y/N"
    If(($confirm) -ne "y")
    {
        # end
    }
        Else
    {



    New-Item $newFolderFull -ItemType Directory

    New-ADGroup -Name "$XG1_Filerights" -GroupScope DomainLocal
    Write-Output ("{0:yyyy-MM-dd HH:mm:ss} $XG1_Filerights er nu oprettet" -f (Get-Date))
    New-ADGroup -Name "$XG2_FileRights" -GroupScope DomainLocal
    Write-Output ("{0:yyyy-MM-dd HH:mm:ss} $XG2_FileRights er nu oprettet" -f (Get-Date))

    $userRW = read-host -Prompt "Skriv navn på bruger den skal være i $XG1_Filerights med , i mellem"
    foreach ($User in $userRW -split ',')
    {
        Add-ADGroupMember -Identity $XG1_Filerights -members $User
        Write-Output ("{0:yyyy-MM-dd HH:mm:ss} Modify rights have been granted to User {1}" -f (Get-Date),($User))
    }
        $userR = read-host -Prompt "Skriv navn på bruger den skal være i $XG2_FileRights med , i mellem"
        foreach ($User in $userR -split ',')
    {
        Add-ADGroupMember -Identity $XG2_FileRights -members $User
        Write-Output ("{0:yyyy-MM-dd HH:mm:ss} Reading rights have been granted to User {1}" -f (Get-Date),($User))
    }
        Write-Output "Remove Inheritance.."
        icacls $newFolderFull /inheritance:d
    # Rights
        $readOnly = [System.Security.AccessControl.FileSystemRights]"ReadAndExecute"
        $readWrite = [System.Security.AccessControl.FileSystemRights]"modify"
    # Inheritance
        $inheritanceFlag = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit"
    # Propagation
        $propagationFlag = [System.Security.AccessControl.PropagationFlags]::None
    # User
        $userRW = New-Object System.Security.Principal.NTAccount($XG1_Filerights)
        $userR = New-Object System.Security.Principal.NTAccount($XG2_FileRights)
    # Type
        $type = [System.Security.AccessControl.AccessControlType]::Allow
        $accessControlEntryDefault = New-Object System.Security.AccessControl.FileSystemAccessRule @("Domain Users", $readOnly, $inheritanceFlag, $propagationFlag, $type)
        $accessControlEntryRW = New-Object System.Security.AccessControl.FileSystemAccessRule @($userRW, $readWrite, $inheritanceFlag, $propagationFlag, $type)
        $accessControlEntryR = New-Object System.Security.AccessControl.FileSystemAccessRule @($userR, $readOnly, $inheritanceFlag, $propagationFlag, $type)
        $objACL = Get-ACL $newFolderFull
        $objACL.RemoveAccessRuleAll($accessControlEntryDefault)
        $objACL.AddAccessRule($accessControlEntryRW)
        $objACL.AddAccessRule($accessControlEntryR)
        Set-ACL $newFolderFull $objACL
    }


    $log = @()
    $date = Get-Date -Format g
    $user = $env:UserName
    $newFolderFull = "c:\folder"
    $log += $date, $user, $newFolderFull
    Stop-Transcript
    $log | add-content "c:\temp\transcript.txt"

1 Ответ

0 голосов
/ 14 декабря 2018

Я бы предложил Start-Transcript в сочетании с различными переменными, которые вы можете добавить в файл.Это был бы самый простой способ.

Например:

Start-Transcript -Path "c:\temp\transcript.txt"
$log = @()
$date = Get-Date
$user = $env:UserName
$newFolderFull = "c:\folder"
$log += $date, $user, $newFolderFull
Stop-Transcript
$log | add-content "c:\temp\transcript.txt"

Это очень хорошо работает с Write-Output.
Например:

    foreach ($User in $userR -split ',') {
        Add-ADGroupMember -Identity $groupnameR -members $User
        Write-Output ("{0:yyyy-MM-dd HH:mm:ss} reading rights have been granted to User {1}" -f (Get-Date),($User))
    }

Этонапишет в журнале строку, где {0} заменяется отметкой даты и времени, а {1} будет пользователем.
Заголовок стенограммы будет содержать некоторую информацию о хосте, который также запускает сценарий,но он отличается версией powershell.

Таким образом, вы увидите, когда, кто, что, где.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...