|
|
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
Пытаюсь записать информацию о свободном месте на дисках в таблицу при помощи скрипта ниже. Когда запускаю скрипт через джоб, выдает ошибку: Unable to start execution of step 1 (reason: line(18): Syntax error). The step failed. Я так понимаю, что ругается на эту строку: $Command.CommandText ="INSERT into DiskSpace ([Drive], [MediaType], [Size], [FreeSpace]) VALUES ('$($Output.DeviceId)', '$($Output.MediaType)', '$($Output.Size)', '$($Output.FreeSpace)')" Если запускаю скрипт через командную строку Powershell, то все работает без ошибок, но вместо данных записывает нули: Drive,MediaType,Size,FreeSpace ,0,0,0 ,0,0,0 ,0,0,0 ,0,0,0 ,0,0,0 ,0,0,0 ,0,0,0 ,0,0,0 Причем строк с нулями в два раза больше чем надо, там всего четыре диска. Когда запускаю команду $output из командной строки, то там все нормально: DeviceId MediaType Size FreeSpace -------- --------- ---- --------- A: 5 C: 12 146154967040 105137184768 D: 12 536862916608 18457624576 E: 11 Вот сам скрипт: $serverName = "MyServer" $databaseName = "DBMonitor" $Connection = New-Object System.Data.SQLClient.SQLConnection $Output = New-Object WMISearcher $Connection.ConnectionString ="Server=$serverName;Database=$databaseName;trusted_connection=true;" $Connection.Open() $Command = New-Object System.Data.SQLClient.SQLCommand $Command.Connection = $Connection $Item = @("DeviceId", "MediaType", "Size", "FreeSpace") $Output = Get-WmiObject Win32_logicaldisk | Format-Table DeviceId, MediaType, Size, FreeSpace -auto foreach ($row in $Output) { $Command.CommandText ="INSERT into DiskSpace ([Drive], [MediaType], [Size], [FreeSpace]) VALUES ('$($Output.DeviceId)', '$($Output.MediaType)', '$($Output.Size)', '$($Output.FreeSpace)')" $Command.ExecuteNonQuery() | out-null } $Connection.Close() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2012, 06:44 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
почему '$($Output.MediaType) а не '$($row.MediaType)' зачем format-table, если никуда не выводится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2012, 09:30 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
belugin4почему '$($Output.MediaType) а не '$($row.MediaType)' зачем format-table, если никуда не выводится Спасибо, заработало! А как еще сюда добавить условие, чтобы вставлять только те записи, где MediaType = 12 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2012, 10:20 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
А из сиквельной джобы все равно не работает. Из коммандной строки - все прекрасно. :( Ругается на 16-ю строку, это похоже там, где insert происходит: Message Unable to start execution of step 1 (reason: line(16): Syntax error). The step failed. $serverName = "." $databaseName = "DBMonitor" $Connection = New-Object System.Data.SQLClient.SQLConnection $Output = New-Object WMISearcher $Connection.ConnectionString ="Server=$serverName;Database=$databaseName;trusted_connection=true;" $Connection.Open() $Command = New-Object System.Data.SQLClient.SQLCommand $Command.Connection = $Connection $Item = @("DeviceId", "MediaType", "Size", "FreeSpace") $Output = Get-WmiObject Win32_logicaldisk foreach ($row in $Output) { $Command.CommandText ="INSERT into DiskSpace ([Drive], [MediaType], [Size], [FreeSpace]) VALUES ('$($Row.DeviceId)', '$($Row.MediaType)', '$($Row.Size)', '$($Row.FreeSpace)')" $Command.ExecuteNonQuery() | out-null } $Connection.Close() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2012, 10:24 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
наберите в командной строке ? -? Roust_mА из сиквельной джобы все равно не работает. Из коммандной строки - все прекрасно. :( 1. Я бы избавился от $output - вдруг в сиквеле такая переменная уже есть или что0нибудь типа того Код: powershell 1. 2. 3. 4. 5. 6. 7. 8. 2. Я бы прологгировал стейтменты типа "INSERT into DiskSpace ([Drive], [MediaType], [Size], [FreeSpace]) VALUES ('$($_.DeviceId)', '$($_.MediaType)', '$($_.Size)', '$($_.FreeSpace)')" >> c:\log.txt 3. Я бы воспрользовался параметрами (вдруг ' это раздлелитель тысячных) 4. Могут быть проблемы с доступом у юзера из под которого выполнчется джоб ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2012, 19:07 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
Попробовал команду выше, опять синтаксическая ошибка. Логгировать ее не получается, потому, что скрипт не запускается из-за синтаксической ошибки. Когда поменял $Command.CommandText ="INSERT into DiskSpace ([Drive], [MediaType], [Size], [FreeSpace]) VALUES ('$($_.DeviceId)', '$($_.MediaType)', '$($_.Size)', '$($_.FreeSpace)')" на $Command.CommandText ="INSERT into DiskSpace ([Drive], [MediaType], [Size], [FreeSpace]) VALUES ('1', '12', '100', '50')" все заработало, но мне естественно нужны реальные значения. Значит дело в строках типа '$($_.FreeSpace)'). Как использовать параметры я не разобрался. По ссылке там вообще всякие Си Шарп, а я не программист. С правами у пользователя все в порядке (sa), да и ругается на синтаксическую ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2012, 06:35 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
Вот что вернуло ? -? PS SQLSERVER:\SQL\342300-DEV26\DEFAULT\Databases\dbmonitor> ? -? Name Category Synopsis ---- -------- -------- % Alias ForEach-Object ? Alias Where-Object h Alias Get-History r Alias Invoke-History PS SQLSERVER:\SQL\342300-DEV26\DEFAULT\Databases\dbmonitor> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2012, 06:44 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
Нашел обходной вариант: положил скрипт в текстовый файл и запускаю из джобы этот файл: c:\temp\DSM.ps1 Все работает, но все-же интересно было бы разобраться, как заставить работать этот скрипт из самой джобы, без необходимости класть его в текстовый файл, ибо синхронизация этих файлов - лишняя головная боль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2012, 07:17 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
Roust_m, ? -? это я намекал посмотреть справку по where-object а что будет если запустить такой же джоб в котором вместо вставки в SQL Get-WmiObject Win32_logicaldisk > c:\mylog.txt ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2012, 21:49 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
belugin4Roust_m, ? -? это я намекал посмотреть справку по where-object а что будет если запустить такой же джоб в котором вместо вставки в SQL Get-WmiObject Win32_logicaldisk > c:\mylog.txt Все работает, вот что выдал лог файл: DeviceID : C: DriveType : 3 ProviderName : FreeSpace : 105120432128 Size : 146154967040 VolumeName : C_DRIVE DeviceID : D: DriveType : 3 ProviderName : FreeSpace : 18463850496 Size : 536862916608 VolumeName : New Volume Самое интересное, что вставка тоже работает, если вместо значений типа ('$($_.DeviceId)', '$($_.MediaType)', '$($_.Size)', '$($_.FreeSpace)')" использовать что-то типа ('1', '2', '3', '4')" А с ('$($_.DeviceId)', '$($_.MediaType)', '$($_.Size)', '$($_.FreeSpace)')" работает только если скрипт выложить в текстовый файл и потом его запускать из джобы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2012, 02:53 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
Roust_m, осталось прологгировать получившийся SQL перед запуском ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2012, 10:44 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
belugin4Roust_m, осталось прологгировать получившийся SQL перед запуском А как его прологировать? Да и вообще он не запускается, ибо ругается на синтаксическую ошибку. Почему-то когда тот-же скрипт из файла запускается, то синтаксическая ошибка куда-то чудным образом испаряется. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2012, 10:48 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
Roust_m, Код: powershell 1. Может быть 1000 причин, начиная от разных прав, кончая разной версии среды. Кстати, выведите $host.version в лог тоже - сравним ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2012, 23:05 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
beluginRoust_m, Код: powershell 1. Может быть 1000 причин, начиная от разных прав, кончая разной версии среды. Кстати, выведите $host.version в лог тоже - сравним Запускаю скрипт ниже, но лога не получается: синтаксическая ошибка в строке 11. $serverName = "." $databaseName = "DBMonitor" $Connection = New-Object System.Data.SQLClient.SQLConnection $Connection.ConnectionString ="Server=$serverName;Database=$databaseName;trusted_connection=true;" $Connection.Open() $Command = New-Object System.Data.SQLClient.SQLCommand $Command.Connection = $Connection Get-WmiObject Win32_logicaldisk -filter "MediaType=12" | %{ $Command.CommandText ="INSERT into DiskSpace ([Drive], [MediaType], [Size], [FreeSpace]) VALUES ('$($_.DeviceId)', '$($_.MediaType)', '$($_.Size)', '$($_.FreeSpace)')" >> c:\temp\0.log.txt $Command.ExecuteNonQuery() | out-null } $Connection.Close() Date 1/16/2012 5:06:13 PM Log Job History (_test) Step ID 1 Server 342300-DEV26 Job Name _test Step Name Test step Duration 00:00:00 Sql Severity 0 Sql Message ID 0 Operator Emailed Operator Net sent Operator Paged Retries Attempted 0 Message Unable to start execution of step 1 (reason: line(11): Syntax error). The step failed. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2012, 03:08 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
beluginRoust_m, Код: powershell 1. Может быть 1000 причин, начиная от разных прав, кончая разной версии среды. Кстати, выведите $host.version в лог тоже - сравним $host.version >> c:\temp\1.log.txt выдает: Major Minor Build Revision ----- ----- ----- -------- 2 0 -1 -1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2012, 03:11 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
Roust_m, Надо убрать $Command.CommandText = и просто прологгировать SQL. Код: powershell 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2012, 08:46 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
b4Roust_m, Надо убрать $Command.CommandText = и просто прологгировать SQL. Код: powershell 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Один фиг: Message Unable to start execution of step 1 (reason: line(11): Syntax error). The step failed. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2012, 09:05 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
Roust_m, пока приходит в голову только убрать все вставленные переменные и добавлять по одной начать с Код: powershell 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2012, 10:52 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
b4Roust_m, пока приходит в голову только убрать все вставленные переменные и добавлять по одной начать с Код: powershell 1. Джоб с такой строкой вернул такой лог: INSERT into DiskSpace ([Drive], [MediaType], [Size], [FreeSpace]) VALUES ( INSERT into DiskSpace ([Drive], [MediaType], [Size], [FreeSpace]) VALUES ( Попробовал добавить "INSERT into DiskSpace ([Drive], [MediaType], [Size], [FreeSpace]) VALUES ('$($_.DeviceId)'" >> c:\temp\0.log.txt или: "INSERT into DiskSpace ([Drive], [MediaType], [Size], [FreeSpace]) VALUES ('$($_.DeviceId)')" >> c:\temp\0.log.txt (разница в скобке в конце) В обоих случаях синтаксическая ошибка и лога нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 05:39 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
Также пробовал: "INSERT into DiskSpace ([Drive], [MediaType], [Size], [FreeSpace]) VALUES ('1', '2', '3', '$($_.FreeSpace)')" >> c:\temp\0.log.txt ... "INSERT into DiskSpace ([Drive], [MediaType], [Size], [FreeSpace]) VALUES ('$($_.DeviceId)', '2', '3', '4')" >> c:\temp\0.log.txt (все комбинации) или: "INSERT into DiskSpace ([Drive]) VALUES ('$($_.DeviceId)')" >> c:\temp\0.log.txt Один фиг, - синтаксическая ошибка. Работает только: "INSERT into DiskSpace ([Drive], [MediaType], [Size], [FreeSpace]) VALUES ('1', '2', '3', '4')" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 06:00 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
Roust_m, Посмотрим что будет если не пользоваться подстановкой переменных в строчке Код: powershell 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 08:18 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
b4, еще $_ | gm >> log.txt ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 08:22 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
b4Roust_m, Посмотрим что будет если не пользоваться подстановкой переменных в строчке Код: powershell 1. 2. конечно кавычка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 08:26 |
|
||
|
Помогите со скриптом Powershell
|
|||
|---|---|---|---|
|
#18+
b4b4Roust_m, Посмотрим что будет если не пользоваться подстановкой переменных в строчке Код: powershell 1. 2. конечно кавычка Вот что я получил в логе: C: INSERT into DiskSpace ([Drive], [MediaType], [Size], [FreeSpace]) VALUES ('C:') D: INSERT into DiskSpace ([Drive], [MediaType], [Size], [FreeSpace]) VALUES ('D:') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 10:07 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=37623538&tid=1342487]: |
0ms |
get settings: |
4ms |
get forum list: |
11ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
151ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 416ms |

| 0 / 0 |
