Я уже некоторое время использую пользовательский класс в PS (2.0):
import-module .\MyClassLib.dll
$task = New-Object MyClassLib.OracleScript -Property @{
Files="MyScript.sql"
Database="TEST"
User="USER"
Password="PASSWORD"
}
$result = $task.Execute()
И это прекрасно работает.
Однако я хотел создать CmdLet в C #, чтобы сделать работу вместо этого. Поэтому после создания командлета я подумал, что могу выполнить одно из следующих действий:
Invoke-OracleScript @{
Files="Script.sql"
Database="db"
User="user"
Password="password"
}
Invoke-OracleScript @{
Files="Script.sql";
Database="db";
User="user";
Password="password";
}
Invoke-OracleScript -Property @{
Files="Script.sql"
Database="db"
User="user"
Password="password"
}
Но не повезло. :. (
Я получаю сообщения об ошибках вроде:
- Не удается найти файл System.Collections.Hashtable (он считает, что вся хеш-таблица является параметром Files)
- Невозможно найти параметр, который соответствует имени параметра «Свойство»
- И еще пара.
Мой класс:
[Cmdlet(VerbsLifecycle.Invoke, "OracleScript", ConfirmImpact = ConfirmImpact.High, SupportsShouldProcess = true, SupportsTransactions = false)]
public class Invoke_OracleScript : Cmdlet, IOracleScript
{
[Parameter(Mandatory = true, Position = 0, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
public string Files { get; set; }
[Parameter(Mandatory = true, Position = 1, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
public string Database { get; set; }
....
Если я вместо этого использую такие параметры: -Files "" -Database "", все работает нормально, но все должно быть в 1 строке, что очень плохо для чтения. Так что хеш-таблица действительно мое самое большое желание:).
Может кто-нибудь объяснить мне, что мне здесь не хватает?
(ParameterSets ?, секретный атрибут, который я не смог найти в документации, другое)
С уважением