- ISHREMOTE-052 Add
Get-IshBaseline,Find-IshBaselineandGet-IshBaselineItemfor metrics/insights purposes ISSUE #2 - ISHREMOTE-011
IshFieldpromotion to properties #48 - ISHREMOTE-022 Refactor to
IshTypeFieldSetupby replacing hardcoded System and Required fields by dynamic ones ISSUE #3 - ISHREMOTE-047
Set-IshMetadataField/Set-IshMetadataFilterFieldtakeobject[]instead ofstringand convert internally - ISHREMOTE-049 Overload
Set-IshRequestedMetadataFieldto acceptIshTypeFieldDefinition[]to generateIshMetadataField[] - ISHREMOTE-040 Support ExecutionPolicy AllSigned (SignAndPublish.ps1)
- ISHREMOTE-045 Add parameter argument completion for interactive usage.
- ISHREMOTE-034 Add
Get-IshTranslationJob,Find-IshTranslationJobandGet-IshTranslationJobItemfor analysis purposes - ISHREMOTE-033 Add
Get-IshTranslationTemplate,Remove-IshTranslationTemplateandAdd-IshTranslationTemplate - ISHREMOTE-030 Fix
Stop-IshPublicationOutputfailing with null reference exception on-WhatIfusage - ISHREMOTE-025 Add
Get-IshFieldthat returns<ishfields>basedISHType[]and switch flags - ISHREMOTE-020 Overload all
-RequestedMetadataonFind-/Get-cmdlets usingIshTypeFieldSetup#48 - ISHREMOTE-024 Add
Filter-IshValueField, actuallyFilter-IshMetadataField - ISHREMOTE-001 Prepare for OpenSourceSoftware and Continues Integration ISSUE #1
- ISHREMOTE-002 Performance boost for legacy imports to avoid Retrieve API calls to feed the pipeline
- ISHREMOTE-048 Merge
Find-cmdlets into a parameter group on theGet-cmdlets. SoGet-allows retrieval with identifiers and based on Find criterias. - ISHREMOTE-008 Add
Unlock-IshUser - ISHREMOTE-015 Add
Move-IshPublicationOutputbased onMove-IshDocumentObj - ISHREMOTE-029 Overload
Set-IshValueFieldto accept IshObject/IshFolder - ISHREMOTE-035 Add
Get-IshSettingWorkflowwhich in turn requiresIshSettingWorkflowSetupandIshSettingWorkflowTransition - ISHREMOTE-031 Extend parameter
-FolderPathwith intellisense - ISHREMOTE-006 Add Missing/Legacy Pester tests ISSUE #4
- ISHREMOTE-016 Add
Filter-IshObjectcmdlet taking MetadataFilter parameter to do client-side object filtering - ISHREMOTE-014 Add
Test-IshFolder - ISHREMOTE-027 Add
Test-IshDocumentObjandTest-PublicationOutput - ISHREMOTE-013 Optimize with logical delete on
Remove-IshDocumentObjandRemove-IshPublicationOutput - ISHREMOTE-010 IshSession should refresh token
- ISHREMOTE-051 Mandatory AllowOnCreate fields for
Add-cmdlets should have their own ParameterSetNameMandatoryParameterGroup - ISHREMOTE-028 Add
Search-IshDocumentObj#52 - ISHREMOTE-050
Get-IshSettingshould return same output type IshField for-FieldName(string) and-RequestedMetadata. String output could be achieved by-Rawflag for both. - ISHREMOTE-012 Respect IshSession.BatchSize and IshSession.BatchSize
- ISHREMOTE-005 Implement Client Library retry mechanism next to existing timeout implementation
- ISHREMOTE-009 DocumentObj data migration cmdlets like
Get-IshDocumentObjData,Save-IshDocumentObj,... - ISHREMOTE-032 Implement Provider for ISH:// usage
- ISHREMOTE-046 More documentation for Get-Help
- ISHREMOTE-999 The end!
Below entries are about plans, ideas, cross-linking,...
ISHRemote.PesterSetup.ps1through Get-CIVariable("PROJECT", "NAME", "DEFAULT") idea (see ISHBootStrap)- Continuous Integration (CI) should run on release/debug, project/version/user dimensions; allowing 10.0.x (partially!), 11.0.x, 12.0.x and TEST nightly run. This table needs README.MD documentation, and probably also takes part in ISHRemote major version bumping
- .\Samples\ becomes Articles, Get-Help inspiration and Pester Test.
ISHRemote.PesterSetup.ps1to hold $ignoreSslPolicyErrors=$false which is explictly passed to allNew-IshSessionswitch parameters IgnoreSslPolicyErrors:$ignoreSslPolicyErrors except overwritten by the-IgnoreSslPolicyErrorstests. This would allow CI-testing of environments with invalid certificates.
- Cancelling the pipeline seems to be unsupported
- Any script by default should pass information on the pipeline, which is what ISHRemote does.
If your script by default doesn't do that, you still force it to do that by passing [-PassThru].
To avoid the unwanted Retrieve calls, specify -PassThru $false explicitly. Implicitly and when specified it is true, unless explicitly specified as false.
Sample PassThru implementation
ISHREMOTE-003 DONE
- Convert readme.txt to README.MD and BACKLOG.MD including a why and getting started section.
ISHREMOTE-004 DONE
- Public GitHub project
- Timeout is implemented, but there is no retry mechanism for API calls inside the cmdlets. Probably means intoducing an API interface/facade to be able to easily wrap that. Potentially include token refresh as well. Might make it easier to change transport layer in a far future (e.g. REST or 3.0 API)
- All new code should receive Pester tests, this one is about correcting legacy/missing tests.
ISHREMOTE-007 DONE
- Publish to PSGallery, allowing traction, refering to answer in community forums like How to get word count for all topics in SDL in a particular period of time?
- Requires ISHREMOTE-026
- This aligns but doesn't necessarily require ISHREMOTE-004
Unlock-IshUser-IshSession -UserName will set FISHLOCKED=false (will throw on FISHLOCKED=true) available since Kojak/13.0.0
DocumentObj data migration cmdlets like Get-IshDocumentObjData, Save-IshDocumentObj,...
Get-IshDocumentObjDatashould pipeline IshObject if-FolderPathparameter is missing. This allows passing metadata and blob in one call as input for Save-IshDocumentObj or even Set-IshDocumentObj. Matching cmdlet Get-IshPublicationOutputData could do the same, although encoding large 'chunked' blobs in the ishdata section is far from ideal.- Add
Save-IshDocumentObjto filesystem, probably needs matchingLoad-IshDocumentObjthat is pipeline friendly. ConsiderSave-IshDocumentObjas debug/back-up but pipeline friendly to duplicate problems from one ishsession to the next.- Save the blob as
[ShortenedTitle]=Logicalname=Version=Language=Resolution.Edtand the metadata as[ShortenedTitle]=Logicalname=Version=Language=Resolution.metholding ishfields (or ishobject)
- Save the blob as
- Similar data migration cmdlets (Save-Ish* and Load-Ish*) could be for User, UserGroup, PublicationOutput... actually required if we do per cmdlet object promotion, see ISHREMOTE-011.
- ISHRemote.Objects should all be fully serialiable for temporary file storage and usage through ConvertTo-Xml and ConvertTo-JSon
- Consistency remarks
Set-IshDocumentObjprobably needs TryGetMetadata extending to do either Create or Update call. So farSet-cmdlets do not create objects!New-IshDocumentObj, so a client-side in-memory representation needs to matchLoad-IshDocumentObj. If we ever do that given the complexity of system and mandatory fields.
- Token inside IshSession doesn't refresh itself (like in the Client Tools), introduce [-AutoRefresh] which sets clients to null when InfoShareWcfConnection.IsValid.
Perhaps a Refresh-IshSession cmdlet (hmm better implicit/silent). Preferably make it work for the ISHRemote as client library as well, or doc it.
ISHREMOTE-011 DONE
IshField promotion to properties. Either by more advanced IshObject inheritance or by NoteProperty solutions.
- Dynamic Members/Properties on all ishobject types allowing an easy $ishobject.FISHEMAIL. As an optional
switch parameter perhaps respecting a variable like $DebugPreference. Or make it a toggle property on IshSession. [TS-10266]
NoteProperties are string only, so date comparisons are still hard (using yyyyMMdd.HHmmss allows compare operators),
hence Filter-IshObject/Filter-IshEvent/Filter-IshFolder.
- PSNoteProperty: hardcoded date fields converting dd/MM/yyy HH:mm:ss to iso format allowing string compare: yyyyMMdd.HHmmss
EventCmdlet.WrapAsPSObjectAndAddNotePropertiesexists and holds the code. Question remains if it the right way to do it (PassThru, seperate aliases per object type forConvert-IshObject,Add-IshMember,..)
- Instead of solving the NoteProperties (which are strings) promotions through a variable like $ISHPromoteObjects, we
could also introduce [-PassThru] with options
- none, this options boosts import by skipping retrieve for the pipeline
- minimal (current), so just enough identifiable information on the pipeline to allow piping and proper errors
- decorated(psobject-noteproperty) ... is about the promotion to properties for easy usage in Out-GridView (see Stop-IshPublicationOutput sample)
- Promote
IshObjectresults toIshDocumentObjforGet-IshDocumentObjorIshUserforGet-IshUser(andIshEventforGet-IshEvent), so matching the cmdlet noun. This would allow easier printing, nicer table printing through specializedISHRemote.Format.ps1xmlentries, especially in interactive mode. This probably requires a fancy factory implementation compared to the current IshObject(xml) function.- IshDocumentObj groups MasterDoc/Module/.../Template, can print Resolution only for images
- IshPublicationOutput like IshDocumentObj is a multi-level card hierarchy
- IshEDT, IshOutputFormat, IshUser, IshUserGroup, IshUserRole, IshOutputFormat (future IshTranslationJob) derive from IshObject
- Note that IshConfiguration returns an IshField[] currently
- Set-IshField/Set-IshMetadataField should get aliases on IshObject. Make sure the property and IshObject class documentation is elaborate.
- Use cases
Get-IshEvent ... | Export-Csvas easy EventMonitor export [SRQ-4522]Get-IshEvent ... | Filter-IshMetadataField -name -level -le yesterday | Remove-IshEventSee ISHREMOTE-024. Pipeline filter and delete up to a certain date which was a UI feature we used to have allowing easier analysis [SRQ-4522]
- Implement and respect IshSession.BatchSize (especially in Retrieve* cmdlets), IshSession.ChunkSize (PublicationOutput and EventMonitor(if any))
Remove-IshDocumentObjand probablyRemove-IshPublicationOutputwill only remove version and logical level when-Forcewas presented and if the presented language level was the last one. Suggest to add-ForceLogicalwhich will delete by LogicalId, only whenTRISOFT_INFOSHARE_DocumentObjDelete_DenyExpandedLogicalObjectDeleteandTRISOFT_INFOSHARE_PublicationOutputDelete_DenyExpandedLogicalObjectDeleteregistry keys are not active.
- Add
Test-IshFolderthat calls Folder25.GetSubFoldersByIshFolderRef avoiding server-side errors to check for object existance
- Add
Move-IshPublicationOutputbased onMove-IshDocumentObjholding the same Folder25.MoveObjects implementation for consistency
Add Filter-IshObject cmdlet taking MetadataFilter parameter to do client-side object filtering [TS-10372]
- Preferably alias
Filter-IshObjectwithFilter-IshEventandFilter-IshFolderas null-able ValueFromPipeline overloads. Depending on ISHREMOTE-011 for all ISHTypes! - Taking the incoming object, passing throw if it matches the filter and pipeline the same object type out.
- What if the field is not present? Fail the pass? Yes
-IshSessionis required to pass future field type like string/number/date or multivalue which is important for compare operators, see also ISHREMOTE-017 like Settings25.RetrieveFieldSetupByIshType.
Also have a look at Filter-IshValueField (alias Filter-IshFieldValue, actually Filter-IshMetadataField), a bit simpler and cleaner than the -MetadataFilter complexity. See ISHREMOTE-024
ISHREMOTE-017 DONE
Add IshSession.IshTypeFieldSetup allowing Get-IshTypeFieldDefinition and Compare-IshTypeFieldDefinition
Get-IshTypeFieldDefinitionmatchingSettings25.RetrieveFieldSetupByIshTypeon Kojak/13.0.0 which returnsIshTypeFieldDefinitionrecords.IshTypeFieldDefinitionis a denormalized version of the API result<ishtypedefinition>and<ishfielddefinition>.- It will do the call with
-Force, or use the JIT version of the incomingIshSessionavailable asIshTypeFieldSetup. Optional. IshTypeFieldSetupreturns a flat denormalised list ofIshTypeFieldDefinition, alphabetically sorted by ISHType/Level/Field by defaultIshTypeFieldSetupon theIshSessionis initialized bySettings25.RetrieveFieldSetupByIshTypeon Kojak/13.0.0. But on 2014/11.0.x and 2016/12.0.x, based onServerVersionit can be initialized by a TriDKXmlSetup-FullExport coming from the ISHRemote.Resources. Trisoft.ISHRemote.Properties.Resouces.IshTypeFieldSetup.TriDKXmlSetupFullExport_12_00_01 could work.IshTypeFieldSetupshould never block, only advise/warn. So requesting a custom field which is not in theIshTypeFieldDefinition[]will not be stopped client-side, the request will be past to the API which in turn can decide if it needs to error out. ShouldTrisoftCmdletget clientside virtualVerify(Filter/Requested/set)Metadatafunction like deprecatedRemoveSystemFieldsthat Warns when you filter on unknown combinations like FISHMODIFIEDON on PublicationOutputIshTypeFieldDefinitionoutput should get a niceISHRemote.Format.ps1xmlconfiguration for ease of use. When format as table allowCreate is shortened to a C, multi value is a 1 or N, mandatory is M, description size should be cut. Potententially needs smart getters (Is a boolean True printed in a 1-char-column as 'T'?)
- It will do the call with
IshTypeFieldSetupis the object that allows questions like filter system fields or get me essential/descriptive/minimal/all fields for reading or writing for these types.- Should answer questions like questions like 'ISHUser-PASSWORD-action:read-->removefield' or 'ISHModule-MODIFIEDON-action:write-->removefield' which in turn enhances the cmdlet level RemoveSystemFields() to become dynamic
ISHREMOTE-018 DONE
- Add
Get-IshTypeFieldDefinitiontakes an optionalIshSessionand allows loading of a TriDKXmlSetup-FullExport (warning on api data overwrite on 13.0.0/kojak because of api existance)... pipeline result isIshTypeFieldDefinition[]and whenIshSessionis present it is persisted onIshSession.IshTypeFieldSetup.- Function is marked as deprecated from the start. There are no plans for a DBUT-FullExport, only a TriDKXmlSetup-FullExport.
Save-IshTypeFieldDefinition(optionally) is competition for DBUT/TriDKXmlSetup-FullExport but over the API. Note however that the API will never return internal system fields like FFOLDERS.
ISHREMOTE-019 DONE
- Add
Compare-IshTypeFieldDefinitionby either parameter set-IshSessionA/-IshSessionBorIshTypeFieldDefinitionA[]/IshTypeFieldDefinitionB[]- Compare 2 sets of
IshTypeFieldDefinition[]and only spit out differences...alphabetically sorted by ISHType/Level/Field by default over the two sets... so spitting out A and B version back-to-back if different - Compare result could be
IshTypeFieldDefinitionComparewhich inheritsIshTypeFieldDefinitionand adds change property which printed by formats.xml could look #1 column holding typical git-conpare+and-. Or first column==<<>><>and always print type level field… and only columns with differences, the rest of the cells are empty. So everyIshTypeFieldDefinitionCompareshould be printed as two rows with an additional compare column or without but+/-(preferably green/red color highlighting) - Note that JIT
IshSessionload andGet-IshTypeFieldDefinitionover TriDKXmlSetup-FullExport allow a comparison between systems on standard/custom.
- Compare 2 sets of
ISHREMOTE-020 DONE
Overload all -RequestedMetadata on Find-/Get- cmdlets using IshTypeFieldSetup
-RequestedMetadatais not mandatory (check all). So when not specified, we can fall back toIshTypeFieldSetupdescriptive/essential/minimal/basic fields (not all as that includes FISHLINKS, etc).- See also ISHREMOTE-025.
ISHREMOTE-021 DONE
Rename Set-IshValueField, Set-IshFilterField and Set-IshField to Set-IshMetadataField, Set-IshMetadataFilterField and Set-IshRequestedMetadataField
- Discovery-wise, cmdlets ask for
-Metadata,-FilterMetadataand-RequestedMetadatabut the cmdlets to create those<ishfield>memory structures are called:Set-IshValueField,Set-IshFilterFieldandSet-IshField. So rename internal implementation toIshMetadataField,IshMetadataFilterFieldandIshRequestedMetadataField. can stay the same. - Parameter
-RequiredCurrentMetadatacould be done by an alias onSet-MetadataFieldsoSet-IshRequiredCurrentMetadataField - Rename
Get-IshFieldValuetoGet-IshMetadataField - Don't forget a mass-replace to update all documentation.
- Optional
- Part of breaking compatibility with the past, and make it cleaner for first-time users. See also ISHREMOTE-011 and ISHREMOTE-026
- This change could match up with the mandatory
-IshSessionparameter introduction, see ISHREMOTE-023.
ISHREMOTE-022 DONE
Refactor to IshTypeFieldSetup by replacing hardcoded System and Required fields by dynamic ones. Requires ISHREMOTE-017.
- ISHRemote abstract class cmdlet offers RemoveSystemFields, AddRequiredFields, AddRequiredDocumentObjFields, AddRequiredPublicationOutputFields
- Functions like
RemoveNonIdentifierFields/AddRequiredFields/RemoveSystemFieldsrespect metadata-requests for only logical or version... and the ActionMode
ISHREMOTE-023 DONE
- Extend
Set-IshMetadataField,Set-IshMetadataFilterFieldandSet-IshRequestedMetadataFieldcmdlets with-IshSessionto allow ISHTypeFieldDefinition lookup for fieldnames in that database... Cool demo on complete-Name(and-Level) regarding field Set-IshValueFieldcould be based on the field type to make sure the assigment is right regarding number, datetime, version format. Requires ISHREMOTE-017.
Add Filter-IshValueField (alias Filter-IshFieldValue, actually Filter-IshMetadataField), a bit simpler and cleaner than the -MetadataFilter complexity of Filter-IshObject in ISHREMOTE-016.
- Requires ISHREMOTE-017 DONE
- Filter-ishfield(value) -name -level -eq(operator) -value and ishields/ishobject should be lightweight regarding memorymodel (so no ishfield promotion of a field because you now can know it is a date or multivalue?!). If the field is not incoming then remove the object from the pipeline, same of course if the test fails.
- Respect the the
IshSessiondate formatdd/MM/yyy HH:mm:ssbut thanks toIshTypeFieldSetupyou also know which fields are dates, allowing easier compare operators (so iso format avoiding string compare workaround through format yyyyMMdd.HHmmss). DONE
Add Get-IshField that returns <ishfields> based ISHType[] and switch flags
Get-IshFieldor better nameGet-IshRequestedMetadataField, see ISHREMOTE-021- Requires ISHREMOTE-017 DONE
- Switch flags could be
-Descriptive/-System/-Basic/-All. Idea needs to align with ISHREMOTE-011 - This would allow a
Find-IshDocumentObj -IshSess... -RequestedMetadata (Get-IshField -IshSession $ishSession -IshTypeFilter @('ISHLibrary','ISHModule','ISHMasterDoc') -All)
ISHREMOTE-026 DONE
Break compatiblity, remove all Trisoft.Automation artefacts. The goal is to make it easier for first-time users, as little legacy as possible.
- Raise the version number.
- Remove parameters like
-TrisoftSession - Remove cmdlet alias like
Retrieve-/Cancel-/... - Remove deprecated cmdlets like
Show-TrisoftAlias/Get-IshFolderChildren - Rename cmdlets like ISHREMOTE-021
- Don't forget a mass-replace to update all documentation.
Add Test-IshDocumentObj and Test-PublicationOutput through (Try)GetMetadata call to check for object existance
Add Search-IshDocumentObj which in turn requires IshQuery object with Set-IshQueryField
- See [TS-10686]
ISHREMOTE-029 DONE
Overload Set-IshMetadataField to accept IshObject/IshFolder/... on the pipeline to mass update in-memory structure
- Requires alignment with ISHREMOTE-011 and ISHREMOTE-021
- Needs to match overloads of
Get-IshFieldValue - Can we remove
Set-IshFields(plural), is there still a use case for that? MergeFields... isSet-IshValueFieldcapable of doing that one-by-one? IfSet-IshValueFieldtakes object as input, it is still missing the group ishfield merge/overwrite option. So leavingSet-IshFieldsfor now as an advanced function.
Fix Stop-IshPublicationOutput failing with null reference exception on -WhatIf usage
Extend parameter -FolderPath with intellisense
- See also ISHREMOTE-023 which is based on in-memory lookup. This story is about API-based lookup.
- Probably implementation as cmdlet in ISHRemote.psm1 (see ITProceed slide deck)
- Depending on the success, could also be done for
Get-/Find-on parameter-LogicalId - See ISHREMOTE-045
Implement Provider for ISH:// usage (like IIS:// or HKLM://) allowing item/container browsing like Remove-Item/Set-Item
Get inspired on the consul.io one, see https://github.com/ntent-ad/consul-ps-provider
Add Get-IshTranslationTemplate, Remove-IshTranslationTemplate and Add-IshTranslationTemplate which in turn requires IshTranslationJobTemplates
- Especially the cleaning up unused ones seems to be an issue on various environments
Add Get-IshTranslationJob, Find-IshTranslationJob and Get-IshTranslationJobItem for analysis purposes
- Add
Get-IshTranslationJobof a singleIshTranslationJobalways fully initializes by several API calls, and returnsIshTranslationJobrespectingIshTypeFieldSetup, see ISHREMOTE-017IshTranslationJob.IshTranslationJobContainer[], so no explicitGet-cmdlet but still an object with matchingISHRemote.Format.ps1xmlIshTranslationJob.IshTranslationJobWorkflow[], so no explicitGet-cmdlet but still an object with matchingISHRemote.Format.ps1xmlIshTranslationJob.IshExternalTranslationJob[], so no explicitGet-cmdlet but still an object with matchingISHRemote.Format.ps1xml
- Add
Find-IshTranslationJobreturningIshTranslationJob[]only initializesIshTranslationJobrespectingIshTypeFieldSetup, see ISHREMOTE-017 - Add
Get-IshTranslationJobItemof a singleIshTranslationJobin turn requiresIshTranslationJobItemIshTranslationJobItemrespectingIshTypeFieldSetup, see ISHREMOTE-017- Especially columns error/externalstatus allow debugging, available since (TS-10305)
- Can a
IshTranslationJobItembe promoted to aIshDocumentObj? An extra client-side cmdlet, beware of in-memoryNew-IshDocumentObjconsistency.
- None-scope is Creating/Updating/Deleting
IshTranslationJob - None-scope is Creating/Updating/Deleting
IshTranslationJobItem - Tip:
TranslationJobItemhas LogicalId=Version=Language=Resolution as key, and not language card id. There is no API call that takes batches using the readable identifiers. Trick is to create a temporary baseline report (LogicalId=Version) and pass that for completion using Language/Resolution as that will return you language card ids in group.
Add Get-IshSettingWorkflow which in turn requires IshSettingWorkflowSetup and IshSettingWorkflowTransition
- Returns
IshSettingWorkflowTransition[]with matchingISHRemote.Format.ps1xml. So workflow as a table with from/to/role (like the UI). - Should know and respect xml @version attribute
IshSettingWorkflowSetuponIshSession, potentially JIT retrieval, could allow future client-side workflow validation including initial states.- Similar to
IshTypeFieldSetupandIshTypeFieldDefinition, see ISHREMOTE-017. - None-scope is Adding/Removing
IshSettingWorkflowTransition - See also
Admin.XMLStatusConfiguration.xml
ISHREMOTE-036 DONE
Fix IshSession by removing Set properties which don't work like Timeout for WCF-proxy
ISHREMOTE-037 DONE
Rename Add-IshValue/Get-IshValue/Remove-IshValue/Set-IshValue toAdd-IshLovValue/Get-IshLovValue/Remove-IshLovValue/Set-IshLovValue
- IshValue is a too generic term that most people will not bind to List Of Values. Furthermore when searching for
Valueyou also get a confusing hit forSet-IshValueFieldwhich is about<ishfield>and not about<ishlovvalue> - Align with ISHREMOTE-021 and ISHREMOTE-026
ISHREMOTE-038 DONE
Fix Set-IshFilterField to allow more than one filter on the same field (also verified for Set-IshValueField and Set-IshField)
- When querying for 1 January 2016 blob changes by
$metadataFilter = Set-IshFilterField -Name 'FISHLASTMODIFIEDON' -Level Lng -FilterOperator GreaterThanOrEqual -Value '01/01/2016' | Set-IshFilterField -Name 'FISHLASTMODIFIEDON' -Level Lng -FilterOperator LessThan -Value '02/01/2016'the logging onDocumentObj25.Findshows18:13:41.6645 Trace 36 00068 a:UC:Admin2 API25/DocumentObj/Find Trisoft.InfoShare.API25.DocumentObj.Find (xmlMetadataFilter=[<?xml version="1.0" encoding="utf-16"?><ishfields><ishfield name="FISHLASTMODIFIEDON" level="lng" ishoperator="lessthan" ishvaluetype="value">02/01/2016</ishfield></ishfields>]) [] - So the second filter was passed, the first one not, eventually pulling a lot of data from the database.
- Best to also check
Set-IshValueFieldandSet-IshField
ISHREMOTE-039 DONE
Fix RemoveSystemFields to not send the new user fields like (TS-11787)
- FISHPASSWORDMODIFIEDON
- FISHFAILEDATTEMPTS
- FISHLOCKEDSINCE
- FISHPASSWORDHISTORY
Support ExecutionPolicy AllSigned (SignAndPublish.ps1)
- As an Administrator run
Set-ExecutionPolicy AllSignedwhereImport-Module ISHRemotewill fail because of unsigned text files likePSM1andPS1XML. - The full error reads
C:\Users\ddemeyer\Documents\WindowsPowerShell\Modules\ISHRemote\0.1.2119.0\ISHRemote.Format.ps1xml, , C:\Users\ddemeyer\Documents\WindowsPowerShell\Modules\ISHRemote\0.1.2119.0\ISHRemote.Format.ps1xml: The file was skipped because of the following validation exception: File C:\Users\ddemeyer\Documents\WindowsPowerShell\Modules\ISHRemote\0.1.2119.0\ISHRemote.Format.ps1xml cannot be loaded. The file C:\Users\ddemeyer\Documents\WindowsPowerShell\Modules\ISHRemote\0.1.2119.0\ISHRemote.Format.ps1xml is not digitally signed. You cannot run this script on the current system.
ISHREMOTE-041 DONE
Respect single type for IshObjects/IshFolders/IshEvents/IshLovValues, so mark internal"
ISHREMOTE-042 DONE
Respect single type for IshFeatures, so mark internal, improve ps1xml formatting"
ISHREMOTE-043 DONE
Respect single type for IshFields, so mark internal, improve ps1xml formatting"
- Verify the
Fields()usage, should no longer returnIshFields(plural) butIshField[] - Various
IshFieldderivations should print nicer through improvedps1xmlformatting
ISHREMOTE-044 DONE
Respect single type for IshApplicationSettings which is used for statistics when -Count is specified, IshApplicationSetting (single) without -Count"
ISHREMOTE-045 DONE
Add parameter argument completion for interactive usage.
You can parameter matching for wildcard-cmdlet names. I would first think about IshTypeFieldDefinition derived things like field name and level. Another scenario is element name completion (e.g. Find-... when 5+ characters are there for a GUID). The tooltip could show the readable label while the code actually can continue with the element name. FolderPath autocompletion.
* 20160614.ITProceed.TheArtofPowerShellToolmaking.pptx
* https://github.com/thinkbeforecoding/PSCompletion/blob/master/PSCompletion/Register-ParameterCompleter.ps1 hints on "$fakeBoundParameter : A hashtable container names/values of other specified parameters" so only do something when -IshSession is specified, then IshField cmdlet parameters like -Name and -Level could be checked or even suggested
* http://stackoverflow.com/questions/30923696/add-custom-argument-completer-for-cmdlet is a nice intro, and hints at "Another critical piece was having that script run when the module is loaded. This was done by adding this to the .psd1: ScriptsToProcess = 'ArgumentTabCompletion.ps1'"
* See ISHREMOTE-031
More documentation for Get-Help
Set-IshMetadataField/Set-IshMetadataFilterField take object[] instead of string and convert internally
* Alter current public string Value { get; set; } to public object[] Value { get; set; }
* Concatenate/join the object.ToString() with the IshSession.Seperator (comma-space typically)
Merge Find- cmdlets into a ParameterSetName on the Get- cmdlets. So Get- allows retrieval with identifiers and based on Find criterias.
* The Find- cmdlets was built on top of the API Find operation, which triggers a query to find all objects matching the filter criteria.
* The Get- cmdlets was built on top of the API Retrieve/Get operations, which trigger a query given object identifiers and then potentially extra filter criteria.
* This stories tries to be more PowerShell minded and less API minded. Still needs investigation, but in essence Get is a Find but requires object identifiers.
Overload Set-IshRequestedMetadataField to accept IshTypeFieldDefinition[] to generate IshMetadataField[]
* Get-IshTypeFieldDefinition with a couple of Where-Object clauses could serve as input to specify requested metadata
* See also ISHREMOTE-020 and ISHREMOTE-025
Get-IshSetting should return same output type IshField for -FieldName (string) and -RequestedMetadata. String output could be achieved by -Raw flag for both.
* $settings=$configurationTypeFieldDefinition|ForEach-Object { Get-IshSetting -IshSession $ishSession -FieldName $_.Name } returns string[]
* $configurationAllRequestMetadata | ForEach-Object { Get-IshSetting -IshSession $ishSession -RequestedMetadata $_ } returns IshField[]
Mandatory AllowOnCreate fields for Add- cmdlets should have their own ParameterSetName MandatoryParameterGroup
* The metadata for an Add-IshUser requires fields FUSERGROUP, PASSWORD (Internal only) which could as well be explicit cmdlet parameters
* Same goes for other ISHTypes. Alternative could be some New-IshUser or New-IshDocumentObj that creates an in-memory object. See also ISHREMOTE-009
ISHREMOTE-052 DONE
Add Get-IshBaseline, Find-IshBaseline and Get-IshBaselineItem for analysis purposes
- Add
Get-IshBaselineof a singleIshBaselinealways fully initializes by several API calls, and returnsIshBaselinerespectingIshTypeFieldSetup, see ISHREMOTE-017
- Add
Find-IshBaselinereturningIshBaseline[]only initializesIshBaselinerespectingIshTypeFieldSetup, see ISHREMOTE-017 - Add
Get-IshBaselineItemof a singleIshBaselinein turn requiresIshBaselineItemIshBaselineItemrespectingIshTypeFieldSetup, see ISHREMOTE-017- Returns all columns/attributes of the items
IshBaselineItem.IshBaselineReportItem[], so no explicitGet-cmdlet but still an object with matchingISHRemote.Format.ps1xmlbecause returns child entries for reportsIshBaselineItemcan also be used to update baselines as the API asks these items to be wrapped by- None-scope is Creating/Updating/Deleting
IshBaseline - None-scope is Creating/Updating/Deleting
IshBaselineItem