- ISHREMOTE-052 Add
Get-IshBaseline
,Find-IshBaseline
andGet-IshBaselineItem
for metrics/insights purposes ISSUE #2 - ISHREMOTE-011
IshField
promotion to properties #48 - ISHREMOTE-022 Refactor to
IshTypeFieldSetup
by replacing hardcoded System and Required fields by dynamic ones ISSUE #3 - ISHREMOTE-047
Set-IshMetadataField
/Set-IshMetadataFilterField
takeobject[]
instead ofstring
and convert internally - ISHREMOTE-049 Overload
Set-IshRequestedMetadataField
to 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-IshTranslationJob
andGet-IshTranslationJobItem
for analysis purposes - ISHREMOTE-033 Add
Get-IshTranslationTemplate
,Remove-IshTranslationTemplate
andAdd-IshTranslationTemplate
- ISHREMOTE-030 Fix
Stop-IshPublicationOutput
failing with null reference exception on-WhatIf
usage - ISHREMOTE-025 Add
Get-IshField
that returns<ishfields>
basedISHType[]
and switch flags - ISHREMOTE-020 Overload all
-RequestedMetadata
onFind-
/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-IshPublicationOutput
based onMove-IshDocumentObj
- ISHREMOTE-029 Overload
Set-IshValueField
to accept IshObject/IshFolder - ISHREMOTE-035 Add
Get-IshSettingWorkflow
which in turn requiresIshSettingWorkflowSetup
andIshSettingWorkflowTransition
- ISHREMOTE-031 Extend parameter
-FolderPath
with intellisense - ISHREMOTE-006 Add Missing/Legacy Pester tests ISSUE #4
- ISHREMOTE-016 Add
Filter-IshObject
cmdlet taking MetadataFilter parameter to do client-side object filtering - ISHREMOTE-014 Add
Test-IshFolder
- ISHREMOTE-027 Add
Test-IshDocumentObj
andTest-PublicationOutput
- ISHREMOTE-013 Optimize with logical delete on
Remove-IshDocumentObj
andRemove-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-IshSetting
should return same output type IshField for-FieldName
(string) and-RequestedMetadata
. String output could be achieved by-Raw
flag 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.ps1
through 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.ps1
to hold $ignoreSslPolicyErrors=$false which is explictly passed to allNew-IshSession
switch parameters IgnoreSslPolicyErrors:$ignoreSslPolicyErrors except overwritten by the-IgnoreSslPolicyErrors
tests. 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-IshDocumentObjData
should pipeline IshObject if-FolderPath
parameter 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-IshDocumentObj
to filesystem, probably needs matchingLoad-IshDocumentObj
that is pipeline friendly. ConsiderSave-IshDocumentObj
as debug/back-up but pipeline friendly to duplicate problems from one ishsession to the next.- Save the blob as
[ShortenedTitle]=Logicalname=Version=Language=Resolution.Edt
and the metadata as[ShortenedTitle]=Logicalname=Version=Language=Resolution.met
holding 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-IshDocumentObj
probably 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.WrapAsPSObjectAndAddNoteProperties
exists 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
IshObject
results toIshDocumentObj
forGet-IshDocumentObj
orIshUser
forGet-IshUser
(andIshEvent
forGet-IshEvent
), so matching the cmdlet noun. This would allow easier printing, nicer table printing through specializedISHRemote.Format.ps1xml
entries, 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-Csv
as easy EventMonitor export [SRQ-4522]Get-IshEvent ... | Filter-IshMetadataField -name -level -le yesterday | Remove-IshEvent
See 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-IshDocumentObj
and probablyRemove-IshPublicationOutput
will only remove version and logical level when-Force
was presented and if the presented language level was the last one. Suggest to add-ForceLogical
which will delete by LogicalId, only whenTRISOFT_INFOSHARE_DocumentObjDelete_DenyExpandedLogicalObjectDelete
andTRISOFT_INFOSHARE_PublicationOutputDelete_DenyExpandedLogicalObjectDelete
registry keys are not active.
- Add
Test-IshFolder
that calls Folder25.GetSubFoldersByIshFolderRef avoiding server-side errors to check for object existance
- Add
Move-IshPublicationOutput
based onMove-IshDocumentObj
holding 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-IshObject
withFilter-IshEvent
andFilter-IshFolder
as 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
-IshSession
is 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-IshTypeFieldDefinition
matchingSettings25.RetrieveFieldSetupByIshType
on Kojak/13.0.0 which returnsIshTypeFieldDefinition
records.IshTypeFieldDefinition
is a denormalized version of the API result<ishtypedefinition>
and<ishfielddefinition>
.- It will do the call with
-Force
, or use the JIT version of the incomingIshSession
available asIshTypeFieldSetup
. Optional. IshTypeFieldSetup
returns a flat denormalised list ofIshTypeFieldDefinition
, alphabetically sorted by ISHType/Level/Field by defaultIshTypeFieldSetup
on theIshSession
is initialized bySettings25.RetrieveFieldSetupByIshType
on Kojak/13.0.0. But on 2014/11.0.x and 2016/12.0.x, based onServerVersion
it can be initialized by a TriDKXmlSetup-FullExport coming from the ISHRemote.Resources. Trisoft.ISHRemote.Properties.Resouces.IshTypeFieldSetup.TriDKXmlSetupFullExport_12_00_01 could work.IshTypeFieldSetup
should 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. ShouldTrisoftCmdlet
get clientside virtualVerify(Filter/Requested/set)Metadata
function like deprecatedRemoveSystemFields
that Warns when you filter on unknown combinations like FISHMODIFIEDON on PublicationOutputIshTypeFieldDefinition
output should get a niceISHRemote.Format.ps1xml
configuration 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
IshTypeFieldSetup
is 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-IshTypeFieldDefinition
takes an optionalIshSession
and allows loading of a TriDKXmlSetup-FullExport (warning on api data overwrite on 13.0.0/kojak because of api existance)... pipeline result isIshTypeFieldDefinition[]
and whenIshSession
is 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-IshTypeFieldDefinition
by either parameter set-IshSessionA
/-IshSessionB
orIshTypeFieldDefinitionA[]
/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
IshTypeFieldDefinitionCompare
which inheritsIshTypeFieldDefinition
and 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 everyIshTypeFieldDefinitionCompare
should be printed as two rows with an additional compare column or without but+
/-
(preferably green/red color highlighting) - Note that JIT
IshSession
load andGet-IshTypeFieldDefinition
over 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
-RequestedMetadata
is not mandatory (check all). So when not specified, we can fall back toIshTypeFieldSetup
descriptive/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
,-FilterMetadata
and-RequestedMetadata
but the cmdlets to create those<ishfield>
memory structures are called:Set-IshValueField
,Set-IshFilterField
andSet-IshField
. So rename internal implementation toIshMetadataField
,IshMetadataFilterField
andIshRequestedMetadataField
. can stay the same. - Parameter
-RequiredCurrentMetadata
could be done by an alias onSet-MetadataField
soSet-IshRequiredCurrentMetadataField
- Rename
Get-IshFieldValue
toGet-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
-IshSession
parameter 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
/RemoveSystemFields
respect metadata-requests for only logical or version... and the ActionMode
ISHREMOTE-023 DONE
- Extend
Set-IshMetadataField
,Set-IshMetadataFilterField
andSet-IshRequestedMetadataField
cmdlets with-IshSession
to allow ISHTypeFieldDefinition lookup for fieldnames in that database... Cool demo on complete-Name
(and-Level
) regarding field Set-IshValueField
could 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
IshSession
date formatdd/MM/yyy HH:mm:ss
but thanks toIshTypeFieldSetup
you 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-IshField
or 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-IshValueField
capable of doing that one-by-one? IfSet-IshValueField
takes object as input, it is still missing the group ishfield merge/overwrite option. So leavingSet-IshFields
for 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-IshTranslationJob
of a singleIshTranslationJob
always fully initializes by several API calls, and returnsIshTranslationJob
respectingIshTypeFieldSetup
, see ISHREMOTE-017IshTranslationJob.IshTranslationJobContainer[]
, so no explicitGet-
cmdlet but still an object with matchingISHRemote.Format.ps1xml
IshTranslationJob.IshTranslationJobWorkflow[]
, so no explicitGet-
cmdlet but still an object with matchingISHRemote.Format.ps1xml
IshTranslationJob.IshExternalTranslationJob[]
, so no explicitGet-
cmdlet but still an object with matchingISHRemote.Format.ps1xml
- Add
Find-IshTranslationJob
returningIshTranslationJob[]
only initializesIshTranslationJob
respectingIshTypeFieldSetup
, see ISHREMOTE-017 - Add
Get-IshTranslationJobItem
of a singleIshTranslationJob
in turn requiresIshTranslationJobItem
IshTranslationJobItem
respectingIshTypeFieldSetup
, see ISHREMOTE-017- Especially columns error/externalstatus allow debugging, available since (TS-10305)
- Can a
IshTranslationJobItem
be promoted to aIshDocumentObj
? An extra client-side cmdlet, beware of in-memoryNew-IshDocumentObj
consistency.
- None-scope is Creating/Updating/Deleting
IshTranslationJob
- None-scope is Creating/Updating/Deleting
IshTranslationJobItem
- Tip:
TranslationJobItem
has 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
IshSettingWorkflowSetup
onIshSession
, potentially JIT retrieval, could allow future client-side workflow validation including initial states.- Similar to
IshTypeFieldSetup
andIshTypeFieldDefinition
, 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
Value
you also get a confusing hit forSet-IshValueField
which 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.Find
shows18: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-IshValueField
andSet-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 AllSigned
whereImport-Module ISHRemote
will fail because of unsigned text files likePSM1
andPS1XML
. - 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
IshField
derivations should print nicer through improvedps1xml
formatting
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-IshBaseline
of a singleIshBaseline
always fully initializes by several API calls, and returnsIshBaseline
respectingIshTypeFieldSetup
, see ISHREMOTE-017
- Add
Find-IshBaseline
returningIshBaseline[]
only initializesIshBaseline
respectingIshTypeFieldSetup
, see ISHREMOTE-017 - Add
Get-IshBaselineItem
of a singleIshBaseline
in turn requiresIshBaselineItem
IshBaselineItem
respectingIshTypeFieldSetup
, see ISHREMOTE-017- Returns all columns/attributes of the items
IshBaselineItem.IshBaselineReportItem[]
, so no explicitGet-
cmdlet but still an object with matchingISHRemote.Format.ps1xml
because returns child entries for reportsIshBaselineItem
can 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