VBスクリプトから変換した次のPowerShellコマンドがあります。
$conn = New-Object System.Data.SqlClient.SqlConnection(“Data Source=SERVER; Initial Catalog=DATABASE; Integrated Security=SSPI”)
$conn.Open()
$cmd1 = $conn.CreateCommand()
$cmd1.CommandType = [System.Data.CommandType]::Text
$cmd1.CommandText =“SELECT guid, name, [Serial Number] FROM dbo.wrksta as a inner join Inv_AeX_HW_Serial_Number as b on a.GUID=b._resourceGUID ORDER BY Name”
$data = $cmd1.ExecuteReader()
$cmd2 = $conn.CreateCommand()
$cmd2.CommandType = [System.Data.CommandType]::Text
$cmd2.CommandText =“SELECT top 1 [User] FROM dbo.Evt_aex_client_logon WHERE _resourceGuid = (SELECT top 1 Guid FROM dbo.Wrksta WHERE Name='" + $data["name"] + "' ORDER BY WrkstaID DESC) AND Event = 'logon' AND _eventTime > getdate()-60 GROUP BY [User] ORDER BY count([User]) desc”
$data2 = $cmd2.ExecuteReader()
$dt = new-object “System.Data.DataTable”
$dt.Load($data2)
$dt | format-table
$conn.Close()
2番目のselectステートメントを見ると、最初の変数$ dataの値を使用したいのですが、その記述方法がわかりません。VBでは、次のようになりました。WHERE Name ='"+workstation(" name ")。value +"'は、PowerShellでこれを記述する正しい方法は次のとおりです。'"+ $ data [" name "]+"'。$date変数に格納されているname列の値の後のIm
以前にこれを行うために使用されたVBは以下のとおりです
connString = "Provider=sqloledb;Data Source=SERVER;Initial Catalog=DATABASE;Integrated Security=SSPI;"
objSQL.Open connString
sqlWorkstations = "SELECT guid, name, [Serial Number] FROM dbo.wrksta as a inner join Inv_AeX_HW_Serial_Number as b on a.GUID=b._resourceGUID ORDER BY Name"
Set workstation = objSQL.Execute(sqlWorkstations)
Do Until (workstation.EOF)
sqlUser = "SELECT top 1 [User] FROM dbo.Evt_aex_client_logon WHERE _resourceGuid = (SELECT top 1 Guid FROM dbo.Wrksta WHERE Name='" + workstation("name").value + "' ORDER BY WrkstaID DESC) AND Event = 'logon' AND _eventTime > getdate()-60 GROUP BY [User] ORDER BY count([User]) desc"
set user = objSQL.Execute(sqlUser)
if not user.eof then
userName = user("User").value
else
username = "??????"
end if