scans.ps1
using module PowerShellGet using module PackageManagement using module SmbShare # Setup variables and defaults [string]$scanUser = 'scans' [string]$folderPath = 'C:\scans' [string]$shareName = 'scans' [string]$description = 'Scanning setup by Printer Source Plus.' $ENV:details = 'Loading...' $domainJoined = (Get-CimInstance -Class Win32_ComputerSystem).PartOfDomain $ProgressPreference = 'SilentlyContinue' $VerbosePreference = 'Continue' $ErrorActionPreference = 'Stop' $extras = @{} if ($VerbosePreference -eq 'Continue') { $extras['Verbose'] = $true } $extras['ErrorAction'] = $ErrorActionPreference # Add required assemblies Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing Add-Type -AssemblyName System.Web # Make sure nuget is installed without user intervention if (-not (Get-PackageProvider -Name NuGet @extras)) { Install-PackageProvider -Name NuGet -Force -Confirm:$false @extras } # Trust the PowerShell Gallery repository if (-not (Get-PSRepository -Name PSGallery @extras)) { Register-PSRepository -Name PSGallery -SourceLocation https://www.powershellgallery.com/api/v2 -InstallationPolicy Trusted @extras } if ((Get-PSRepository -Name PSGallery).InstallationPolicy -ne 'Trusted') { Set-PSRepository -Name PSGallery -InstallationPolicy Trusted @extras } # Import the required modules if (-not (Get-Module -Name PackageManagement -ListAvailable)) { Install-Module -Name PackageManagement -Force -Confirm:$false @extras } Import-Module -Name PackageManagement -Force @extras if (-not (Get-Module -Name PowerShellGet -ListAvailable)) { Install-Module PowerShellGet -Force -Confirm:$false @extras } Import-Module -Name PowerShellGet -Scope Local -Force @extras Install-Module WindowsCompatibility -Force -AllowClobber @extras Import-Module WindowsCompatibility -Force @extras Import-Module -Name SmbShare -Force @extras # Import the Scans module $moduleName = "scans" $latestRelease = (Find-Module -Name $moduleName -ErrorAction SilentlyContinue | Sort-Object -Property Version -Descending | Select-Object -First 1).Version $installedModule = Get-InstalledModule -Name $moduleName @extras if ($installedModule -and $installedModule.Version -eq $latestRelease) { Write-Host "Module '$moduleName' is already $latestRelease." } else { if ($installedModule) { Write-Host "Removing installed Module '$moduleName' current version $($installedModule.Version)." Uninstall-Module -Name $moduleName -Force @extras } Write-Host "Installing Module '$moduleName' version $latestRelease." Install-Module -Name $moduleName -AllowClobber -Force -SkipPublisherCheck -Scope CurrentUser -RequiredVersion $latestRelease -Confirm:$false @extras Import-Module $moduleName -Force @extras } # Get user details $userDetails = Show-ScanningSetupForm -scanUser $scanUser -folderPath $folderPath -shareName $shareName -description $description # Extract user details $scanUser = $userDetails.scanUser $scanPass = $userDetails.scanPass $folderPath = $userDetails.folderPath $shareName = $userDetails.shareName $description = $userDetails.description # Show the loading screen $loadingScreen = New-LoadingForm $loadingScreen.Form.Show() $loadingScreen.Form.Topmost = $true try { # Setup the scanning user Set-ScanUser -scanUser $scanUser -scanPass $scanPass -description $description Hide-ScanUserFromLoginScreen -scanUser $scanUser # Setup the scanning folder New-ScanFolder -folderPath $folderPath $users = @($Env:UserName, $scanUser, "Everyone") if ($domainJoined) { $users += "Domain Users" } foreach ($user in $users) { Set-ScanFolderPermissions -folderPath $folderPath -username $user -setPermissions $true } Set-ScansSmbShare -shareName $shareName -folderPath $folderPath -scanUser $scanUser New-DesktopShortcut -shortcutPath "C:\Users\Public\Desktop\Scans.lnk" Set-NetworkSettings -domainJoined $domainJoined -enableFileAndPrinterSharing $true -enablePasswordProtectedSharing $true Update-ProgressBar $loadingScreen "Finished!" } catch { $loadingScreen.Form.Close() | Out-Null Write-Error $_ } finally { $loadingScreen.Form.Close() | Out-Null } $finished = New-LoadingForm $true $ENV:details $finished.Form.ShowDialog() | Out-Null if ($finished.Form -eq [System.Windows.Forms.DialogResult]::OK) { $finished.Form.Close() | Out-Null Exit } |