SQLiteデータベースにデータを書き込み、そこから読み取るPowershellスクリプトを作成しようとしています。私はこのためにPSSQLiteモジュールを使用しています。このスクリプトはあるサーバーでは動作しますが、他のサーバーでは動作しません。どちらのマシンもWindows 2012 R2です。PowershellとPSSqliteを使用したSQLiteのアクセス - SELECTクエリが失敗する
両方のマシンは、次のようになります。私は、SQLiteのデータベースを作成し、その中にテーブルを作成し、テーブルに書き込み、その後、テーブルから読み取るために短いPowerShellスクリプトを持って
PS C:\> $PSVersionTable
Name Value
---- -----
PSVersion 5.0.10586.117
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.10586.117
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
PS C:\> Import-Module PSSQLite
PS C:\> Get-Module PSSQLite
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 1.0.3 PSSQLite {Invoke-SQLiteBulkCopy, Invoke-SqliteQuery, New-SQLiteConn...
PS C:\>
。スクリプトは次のようになります。
Import-Module PSSQLite
$secretsDatabase = ".\secrets.db"
if (Test-Path $secretsDatabase) {
Write-Host "$secretsDatabase already exists"
} else {
$create_query = "create table secrets (tid string, password string, username string)"
$cq_result = Invoke-SqliteQuery -DataSource $secretsDatabase -Query $create_query
$add_secrets_query = "insert into secrets (tid, password, username) values ('xx1', 'somepassword', '[email protected]')"
$as_result = Invoke-SqliteQuery -DataSource $secretsDatabase -Query $add_secrets_query
}
$secretsQuery = "select tid, password, username from secrets limit 1"
$result = Invoke-SqliteQuery -DataSource $secretsDatabase -Query $secretsQuery
Write-Host $result
私は1台のサーバー上でこのPowerShellスクリプトを実行すると、出力は次のようになります。
PS C:\> C:\sqlite_test.ps1
.\secrets.db already exists
@{tid=xx1; password=somepassword; [email protected]}
PS C:\>
これは予想される出力です。
私は他のサーバー上で同じスクリプトを実行すると、出力は次のようになります。テーブルを作成するには、行の作品を挿入するために、両方のシステムで
PS C:\> C:\sqlite_test.ps1
.\secrets.db already exists
Unable to find type [DBNullScrubber].
At C:\Program Files\WindowsPowerShell\Modules\PSSQLite\1.0.3\Invoke-SqliteQuery.ps1:518 char:25
+ [DBNullScrubber]::DataRowToPSObject($row)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (DBNullScrubber:TypeName) [], RuntimeException
+ FullyQualifiedErrorId : TypeNotFound
PS C:\>
、SQLクエリ。
C:\> sqlite3 secrets.db
SQLite version 3.19.3 2017-06-08 14:26:16
Enter ".help" for usage hints.
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE secrets (tid string, password string, username string);
INSERT INTO secrets VALUES('xx1','somepassword','[email protected]');
COMMIT;
sqlite>
つのマシン上のSELECTクエリがあるため、「[DBNullScrubber]」エラーの失敗しかし:これは、両方のマシンでコマンドラインユーティリティを使用して、この結果を得ることによって証明されます。どのマシンでこの問題を解決するには?
------ UPDATE:2017年8月13日より分析-----------------
私はこのためにGitHubのレポで洞窟探検いくつかのコードをしましたモジュール、ファイルへの
私が悪いのサーバー上で、私のPowershellに行き、そのファイルからこのコードスニペットを実行しました:
$cSharp = @'
using System;
using System.Data;
using System.Management.Automation;
public class DBNullScrubber
{
public static PSObject DataRowToPSObject(DataRow row)
{
PSObject psObject = new PSObject();
if (row != null && (row.RowState & DataRowState.Detached) != DataRowState.Detached)
{
foreach (DataColumn column in row.Table.Columns)
{
Object value = null;
if (!row.IsNull(column))
{
value = row[column];
}
psObject.Properties.Add(new PSNoteProperty(column.ColumnName, value));
}
}
return psObject;
}
}
'@
このスニペットはDBNullScrubberクラスを定義します。その後、私は悪いサーバー上の私のコマンドラインに行って、走っ:
PS C:\> Add-Type -TypeDefinition $cSharp -ReferencedAssemblies 'System.Data','System.Xml'
Add-Type : (0) : Warning as Error: Invalid search path 'D:\Program Files\IBM\SQLLIB\LIB' specified in 'LIB environment variable' -- 'The system cannot find
the path specified. '
(1) : using System;
At line:1 char:2
+ Add-Type -TypeDefinition $cSharp -ReferencedAssemblies 'System.Data' ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (error CS1668: W...th specified. ':CompilerError) [Add-Type], Exception
+ FullyQualifiedErrorId : SOURCE_CODE_ERROR,Microsoft.PowerShell.Commands.AddTypeCommand
Add-Type : Cannot add type. Compilation errors occurred.
At line:1 char:2
+ Add-Type -TypeDefinition $cSharp -ReferencedAssemblies 'System.Data' ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Add-Type], InvalidOperationException
+ FullyQualifiedErrorId : COMPILER_ERRORS,Microsoft.PowerShell.Commands.AddTypeCommand
PS C:>
は、私は良いサーバー上でこれを実行し、エラーがなかったです。
この時点で私は何をすべきか分かりません。これをどうすれば解決できますか?
-----------------アップデート2017年8月13日 - 12時11分----------------
私は$ env:Libを印刷しました。良いマシンには何も定義されていませんでした。悪いマシンでそれは言った:
PS C:\> $env:Lib
;D:\Program Files\IBM\SQLLIB\LIB
PS C:\>
'$ env:LIB'を表示します。 – PetSerAl