From aa2bb95765e90d4d9feb33ee1b818cd0442fba36 Mon Sep 17 00:00:00 2001 From: matbe Date: Thu, 12 Sep 2019 15:42:41 +0200 Subject: [PATCH] Remove dependency to dbatools --- src/LATER.psd1 | 2 +- src/Public/Get-CurrentComputerLATER.ps1 | 57 +++++++++++++++++++++-- src/Public/Reset-CurrentComputerLATER.ps1 | 45 +++++++++++++++++- 3 files changed, 96 insertions(+), 8 deletions(-) diff --git a/src/LATER.psd1 b/src/LATER.psd1 index 2949498..a73d946 100644 --- a/src/LATER.psd1 +++ b/src/LATER.psd1 @@ -51,7 +51,7 @@ # ProcessorArchitecture = '' # Modules that must be imported into the global environment prior to importing this module - RequiredModules = @('AdmPwd.PS', 'dbatools') + RequiredModules = @('AdmPwd.PS') # Assemblies that must be loaded prior to importing this module # RequiredAssemblies = @() diff --git a/src/Public/Get-CurrentComputerLATER.ps1 b/src/Public/Get-CurrentComputerLATER.ps1 index bfedf8a..7ad0cb6 100644 --- a/src/Public/Get-CurrentComputerLATER.ps1 +++ b/src/Public/Get-CurrentComputerLATER.ps1 @@ -1,3 +1,38 @@ +function Invoke-SQL { + <# + .SYNOPSIS + Used to query a database using ADO .Net + + .DESCRIPTION + Used to query a database using ADO .Net + + .EXAMPLE + Invoke-SQL -dataSource $SqlInstance -Database $Database -sqlCommand $PolicySQLQuery + + #> + param( + [string] $dataSource = ".\SQLEXPRESS", + [string] $database = "MasterData", + [string] $sqlCommand = $(throw "Please specify a query.") + ) + + $connectionString = "Data Source=$dataSource; " + + "Integrated Security=SSPI; " + + "Initial Catalog=$database" + + $connection = new-object system.data.SqlClient.SQLConnection($connectionString) + $command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection) + $connection.Open() + + $adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command + $dataset = New-Object System.Data.DataSet + $adapter.Fill($dataSet) | Out-Null + + $connection.Close() + $dataSet.Tables + +} + function Get-CurrentComputerLATER { <# .SYNOPSIS @@ -41,6 +76,15 @@ SELECT TOP 1000 [UserId] ,[Timestamp] FROM [$Database].[$Schema].[$TableRequests] WHERE UserId = 'REPLACESID' Order By TimeStamp Desc "@ + $InsertTableRequests = @" +INSERT INTO [$Database].[$Schema].[$TableRequests](UserId,ComputerName,ComputerNameByAddress,ComputerIPAddress,ComputerNameMatchAddress,Timestamp) + VALUES ('{0}','{1}','{2}','{3}','{4}','{5}') +"@ + + $InsertTableFailedRequests = @" +INSERT INTO [$Database].[$Schema].[$TableFailedRequests](UserId,ComputerName,ComputerNameByAddress,ComputerIPAddress,ComputerNameMatchAddress,Error,Timestamp) + VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}') +"@ } process { if ($PSCmdlet.ShouldProcess($ComputerName)) { @@ -49,7 +93,7 @@ FROM [$Database].[$Schema].[$TableRequests] WHERE UserId = 'REPLACESID' Order By $PolicySQLQuery = $BasePolicyQuery -replace 'REPLACESID', ("'{0}'" -f ($Request.UserPolicyGroups -join "', '")) try { - [Object[]]$Policies = Invoke-DbaQuery -SqlInstance $SqlInstance -Database $Database -Query $PolicySQLQuery -ErrorAction Stop | Sort-Object -Property Computers + [Object[]]$Policies = Invoke-SQL -dataSource $SqlInstance -Database $Database -sqlCommand $PolicySQLQuery -ErrorAction Stop | Sort-Object -Property Computers $Policy = $Policies[0] # Preferably log that the user has more than one policy if ($Policies.Count -gt 1) } @@ -58,7 +102,7 @@ FROM [$Database].[$Schema].[$TableRequests] WHERE UserId = 'REPLACESID' Order By } $PastLaterSQLQuery = $BasePastLaterQuery -replace 'REPLACESID', $Request.UserId - [Object[]]$PastLater = Invoke-DbaQuery -SqlInstance $SqlInstance -Database $Database -Query $PastLaterSQLQuery -ErrorAction Stop + [Object[]]$PastLater = Invoke-SQL -dataSource $SqlInstance -Database $Database -sqlCommand $PastLaterSQLQuery -ErrorAction Stop $Request.psobject.Properties.Remove('UserPolicyGroups') $Now = [datetime]::Now @@ -95,18 +139,21 @@ FROM [$Database].[$Schema].[$TableRequests] WHERE UserId = 'REPLACESID' Order By } if ($ThrottleReached) { $Request | Add-Member -MemberType NoteProperty -Name Error -Value $ErrorNotification -ErrorAction Stop - $Request | Write-DbaDbTableData -SqlInstance $SqlInstance -Database $Database -Table $TableFailedRequests -ErrorAction Stop + $InsertTableFailedRequestsValues = $InsertTableFailedRequests -f $Request.UserId,$Request.ComputerName,$Request.ComputerNameByAddress,$Request.ComputerIPAddress,$Request.ComputerNameMatchAddress,$Request.Error,$Now + Invoke-SQL -dataSource $SqlInstance -Database $Database -sqlCommand $InsertTableFailedRequestsValues -ErrorAction Stop throw [System.AccessViolationException]::New($ErrorNotification -replace ($Request.UserId, ($PSSenderInfo.ConnectedUser -replace '^(?:.+\\)'))) } } try { Get-AdmPwdPassword -ComputerName $ComputerName -ErrorAction Stop - $Request | Write-DbaDbTableData -SqlInstance $SqlInstance -Database $Database -Table $TableRequests -ErrorAction Stop + $InsertTableRequestsValues = $InsertTableRequests -f $Request.UserId,$Request.ComputerName,$Request.ComputerNameByAddress,$Request.ComputerIPAddress,$Request.ComputerNameMatchAddress,$Now + Invoke-SQL -dataSource $SqlInstance -Database $Database -sqlCommand $InsertTableRequestsValues -ErrorAction Stop } catch { $ErrorNotification = 'Unknown error: {0}' -f $_.Exception.Message $Request | Add-Member -MemberType NoteProperty -Name Error -Value $ErrorNotification -ErrorAction Stop - $Request | Write-DbaDbTableData -SqlInstance $SqlInstance -Database $Database -Table $TableFailedRequests -ErrorAction Stop + $InsertTableFailedRequestsValues = $InsertTableFailedRequests -f $Request.UserId,$Request.ComputerName,$Request.ComputerNameByAddress,$Request.ComputerIPAddress,$Request.ComputerNameMatchAddress,$Request.Error,$Now + Invoke-SQL -dataSource $SqlInstance -Database $Database -sqlCommand $InsertTableFailedRequestsValues -ErrorAction Stop throw [System.SystemException]::New($ErrorNotification) } } diff --git a/src/Public/Reset-CurrentComputerLATER.ps1 b/src/Public/Reset-CurrentComputerLATER.ps1 index dad8a60..e98cf5e 100644 --- a/src/Public/Reset-CurrentComputerLATER.ps1 +++ b/src/Public/Reset-CurrentComputerLATER.ps1 @@ -1,4 +1,39 @@ -function Reset-CurrentComputerLATER { +function Invoke-SQL { + <# + .SYNOPSIS + Used to query a database using ADO .Net + + .DESCRIPTION + Used to query a database using ADO .Net + + .EXAMPLE + Invoke-SQL -dataSource $SqlInstance -Database $Database -sqlCommand $PolicySQLQuery + + #> + param( + [string] $dataSource = ".\SQLEXPRESS", + [string] $database = "MasterData", + [string] $sqlCommand = $(throw "Please specify a query.") + ) + + $connectionString = "Data Source=$dataSource; " + + "Integrated Security=SSPI; " + + "Initial Catalog=$database" + + $connection = new-object system.data.SqlClient.SQLConnection($connectionString) + $command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection) + $connection.Open() + + $adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command + $dataset = New-Object System.Data.DataSet + $adapter.Fill($dataSet) | Out-Null + + $connection.Close() + $dataSet.Tables + +} + +function Reset-CurrentComputerLATER { <# .SYNOPSIS Reset admin password for given computer @@ -27,14 +62,20 @@ [string]$TablePasswordResets = 'PasswordResets' } process { + $InsertTablePasswordResets = @" +INSERT INTO [$Database].[$Schema].[$TablePasswordResets](UserId,Status,ComputerName,ComputerNameByAddress,ComputerIPAddress,ComputerNameMatchAddress,Timestamp) +VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}') +"@ if ($PSCmdlet.ShouldProcess($ComputerName)) { try { $Request = Get-LaterRequesterInfo -ComputerName $ComputerName -ErrorAction Stop $Request.psobject.Properties.Remove('UserPolicyGroups') + $Now = [datetime]::Now $Reset = Reset-AdmPwdPassword -ComputerName $ComputerName -ErrorAction Stop $Request | Add-Member -MemberType NoteProperty -Name Status -Value $Reset.Status -ErrorAction Stop - $Request | Write-DbaDbTableData -SqlInstance $SqlInstance -Database $Database -Table $TablePasswordResets -ErrorAction Stop + $InsertTablePasswordResetsValues = $InsertTablePasswordResets -f $Request.UserId,$Request.Status,$Request.ComputerName,$Request.ComputerNameByAddress,$Request.ComputerIPAddress,$Request.ComputerNameMatchAddress,$Now + Invoke-SQL -dataSource $SqlInstance -Database $Database -sqlCommand $InsertTablePasswordResetsValues -ErrorAction Stop } catch { $PSCmdlet.ThrowTerminatingError($_)