{"id":2848,"date":"2014-02-15T19:00:16","date_gmt":"2014-02-15T11:00:16","guid":{"rendered":"http:\/\/rmohan.com\/?p=2848"},"modified":"2014-02-15T19:08:11","modified_gmt":"2014-02-15T11:08:11","slug":"dsmod","status":"publish","type":"post","link":"https:\/\/mohan.sg\/?p=2848","title":{"rendered":"Dsmod"},"content":{"rendered":"<p>Reset Password and Force Change at Logon for an Entire OU:<br \/>\ndsquery user &#8220;OU=Singapore,OU=Staff,DC=rmohan,DC=com&#8221; | dsmod user -pwd Password1 -mustchpwd yes<\/p>\n<p>Change &#8220;company&#8221; AD attribute for all Users in an Entire OU:<br \/>\ndsquery user &#8220;OU=Singapore,OU=Staff,DC=rmohan,DC=com&#8221; | dsmod user -company &#8220;rmohan&#8221;<\/p>\n<p>Return the DN of all users in an OU:<br \/>\ndsquery user &#8220;OU=Singapore,OU=Staff,DC=rmohan,DC=com&#8221;<\/p>\n<p>&#8220;CN=User1,OU=Singapore,OU=Staff,DC=rmohan,DC=com&#8221;<br \/>\n&#8220;CN=User2,OU=Singapore,OU=Staff,DC=rmohan,DC=com&#8221;<br \/>\n&#8220;CN=User3,OU=Singapore,OU=Staff,DC=rmohan,DC=com&#8221;<\/p>\n<p>Return the DN of all users in an OU, then get all the groups the users are a member of:<br \/>\ndsquery user &#8220;OU=Singapore,OU=Groups,DC=rmohan,DC=com&#8221; | dsget user -memberof<\/p>\n<p>&#8220;CN=Group1,OU=Singapore,OU=Groups,DC=rmohan,DC=com&#8221;<br \/>\n&#8220;CN=Group2,OU=Singapore,OU=Groups,DC=rmohan,DC=com&#8221;<br \/>\n&#8220;CN=Group3,OU=Singapore,OU=Groups,DC=rmohan,DC=com&#8221;<\/p>\n<p>Return the DN of all users in an OU, then get all the groups the users are a member of and use recursion:<br \/>\ndsquery user &#8220;OU=Singapore,OU=Staff,DC=rmohan,DC=com&#8221; | dsget user -memberof -expand<\/p>\n<p>&#8220;CN=Group1,OU=Singapore,OU=Groups,DC=rmohan,DC=com&#8221;<br \/>\n&#8220;CN=Group2,OU=Singapore,OU=Groups,DC=rmohan,DC=com&#8221;<br \/>\n&#8220;CN=Group3,OU=Singapore,OU=Groups,DC=rmohan,DC=com&#8221;<br \/>\n&#8220;CN=Group4,OU=Singapore,OU=Groups,DC=rmohan,DC=com&#8221;<br \/>\n&#8220;CN=Group5,OU=Singapore,OU=Groups,DC=rmohan,DC=com&#8221;<\/p>\n<p>Return the DN of all users in an OU, then get all the groups the users are a member of and use recursion. Then return the name of all the groups:<br \/>\ndsquery user &#8220;OU=Singapore,OU=Staff,DC=rmohan,DC=com&#8221; | dsget user -memberof -expand | dsget group -samid<\/p>\n<p>samid<br \/>\nGroup1<br \/>\nGroup2<br \/>\nGroup3<br \/>\nGroup4<br \/>\nGroup5<\/p>\n<p>Get all the groups a user is a member of and use recursion. Then return the name of all the groups:<br \/>\ndsquery user &#8220;CN=User3,OU=Singapore,OU=Staff,DC=rmohan,DC=com&#8221; | dsget user -memberof -expand | dsget group -samid<\/p>\n<p>samid<br \/>\nGroup1<br \/>\nGroup2<\/p>\n<p>Create an OU:<br \/>\ndsadd ou &#8220;ou=Singapore,dc=rmohan,dc=com&#8221;<\/p>\n<p>Create a Group:<br \/>\ndsadd group &#8220;cn=Singapore Users,ou=Singapore,dc=rmohan,dc=com&#8221;<\/p>\n<p>Create a User:<br \/>\ndsadd user &#8220;cn=JoeUser1,ou=Singapore,dc=rmohan,dc=com&#8221;<\/p>\n<p>Add a User to a Group:<br \/>\ndsmod group &#8220;cn=SingaporeUsers,ou=Singapore,dc=rmohan,dc=com&#8221; -addmbr &#8220;cn=JoeUser1,ou=Singapore,dc=rmohan,dc=com&#8221;<\/p>\n<p>Find User Beggining with &#8220;J&#8221; and Return Matching Users &#8220;samid&#8221; and &#8220;department&#8221; Attributes:<br \/>\ndsquery user rmohanroot -name J* | dsget user -samid -dept<\/p>\n<p>Move an OU:<br \/>\ndsmove &#8220;ou=LiverpoolStreetOffice,dc=rmohan,dc=com&#8221; -newparent &#8220;ou=Singapore,dc=rmohan,dc=com&#8221;<\/p>\n<p>Rename and OU:<br \/>\ndsmove &#8220;cn=SingaporeUsers,ou=Singapore,dc=rmohan,dc=com&#8221; -newname SingaporeStaff<\/p>\n<p>Remove an OU and all its Subtree Without Prompting:<br \/>\ndsrm -noprompt -subtree &#8220;ou=deleteme,dc=rmohan,dc=com&#8221;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Command &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- Description<br \/>\nDsadd computer<br \/>\nDsadd contact<br \/>\nDsadd group &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;Adds objects to the directory<br \/>\nDsadd ou<br \/>\nDsadd quota<br \/>\nDsadd user<\/p>\n<p>Dsget computer<br \/>\nDsget contact<br \/>\nDsget group<br \/>\nDsget ou<br \/>\nDsget partition<br \/>\nDsget quota &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; Displays properties of objects in the directory<br \/>\nDsget server<br \/>\nDsget site<br \/>\nDsget subnet<br \/>\nDsget user<\/p>\n<p>Dsmod computer<br \/>\nDsmod contact<br \/>\nDsmod group<br \/>\nDsmod ou &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; Modifies select attributes of an existing object in the directory<br \/>\nDsmod partition<br \/>\nDsmod quota<br \/>\nDsmod server<br \/>\nDsmod user<\/p>\n<p>Dsquery *<br \/>\nDsquery computer<br \/>\nDsquery contact<br \/>\nDsquery group<br \/>\nDsquery ou<br \/>\nDsquery partition<br \/>\nDsquery quota &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;Finds objects in the directory that match a specified search criteria<br \/>\nDsquery server<br \/>\nDsquery site<br \/>\nDsquery subnet<br \/>\nDsquery user<\/p>\n<p>Dsmove &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..Moves any object from its current location to a new parent location or renames any object without moving it<\/p>\n<p>Dsrm &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.. Removes an object, the complete subtree under an object in the directory, or both<\/p>\n<p>****************************************************************************<\/p>\n<p>LDAP attribute tag &#8212;&#8212;&#8212;&#8212;&#8212;&#8212; Description<br \/>\nCN= &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;Common name<br \/>\n&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..The name given to the object at creation<br \/>\nOU=&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;Organizational unit<br \/>\n&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.The name of the container<br \/>\nDC=&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;Domain component<br \/>\n&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;The name of the domain<\/p>\n<p>&nbsp;<\/p>\n<p>dsquery ou dc=mohan,dc=com<br \/>\nThis command will produce a listing of all OUs<\/p>\n<p>dsquery user cn=users,dc=mohan,dc.com<br \/>\nIt is going to show all the users in the users container.<\/p>\n<p>dsquery servers -hasfsmo schema or (rid, name, infr and pdc.)<br \/>\nIt is going to show which server(s) has the schema role<\/p>\n<p>*****************************************<\/p>\n<p>dsadd ou &#8220;ou=northwest, dc=mohan, dc=com&#8221;<br \/>\nThis command tells Active Directory to create an OU called northwest<\/p>\n<p>dsadd user &#8220;cn=calvin jay, ou=northwest, dc=mohan, dc=com&#8221;<br \/>\nThis command will create an user named calvin jay in northwest OU<\/p>\n<p>*****************************************<\/p>\n<p>dsquery server -domain mohan.com | dsget server -dnsname ??\u201csite<br \/>\nFinds all domain controllers for domain mohan.com and display their DNS host name and site name<\/p>\n<p>dsget user &#8220;CN=Mike Jay,CN=users,dc=mohan,dc=com&#8221;-memberof ??\u201cexpand<br \/>\nShows the list of groups, recursively expanded, to which a given user belongs<\/p>\n<p>*****************************************<\/p>\n<p>dsmod computer CN=Server1,CN=Computers,DC=mohan,DC=Com -disabled yes<br \/>\nTo disable computer account<\/p>\n<p>dsmod user &#8220;CN=Don Jay,CN=Users,DC=mohan,DC=Com&#8221; -pwd A1b2c3d4 -mustchpwd yes<br \/>\nTo reset password and force him to change his password the next time he logs on to the network<\/p>\n<p>*****************************************<\/p>\n<p>dsmove &#8220;CN=Kim love,OU=Sales,DC=mohan,DC=Com&#8221; -newname &#8220;Kim Falls&#8221;<br \/>\nRenames a user object from Kim Love to Kim Falls<\/p>\n<p>dsmove &#8220;CN=Kim Falls,OU=Sales,DC=mohan,DC=Com&#8221; -newparent OU=Marketing,DC=mohan,DC=Com<br \/>\nMoves Kim Falls from the Sales organization to the Marketing organization<\/p>\n<p>*****************************************<\/p>\n<p>dsrm -subtree -noprompt -c OU=Marketing,DC=mohan,DC=Com<br \/>\nRemoves an organizational unit called &#8220;Marketing&#8221; and all the objects under that organizational unit<\/p>\n<p>dsrm -subtree -exclude -noprompt -c &#8220;OU=Marketing,DC=mohan,DC=Com&#8221;<br \/>\nRemoves all objects under the organizational unit called &#8220;Marketing,&#8221; but leaves the organizational unit intact<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Dsquery<\/p>\n<p>Powerfull tools and derivates:<\/p>\n<p>Dsquery \u2013 Queries Active Directory according to specified criteria<br \/>\nDsadd \u2013 Adds objects to Active Directory<br \/>\nDsget \u2013 Gets information about the object and displays its properties<br \/>\nDsmove \u2013 Moves objects in Active Directory<br \/>\nDsmod \u2013 Modifies specific from objects in Active Directory<br \/>\nDsrm \u2013 Deletes objects or a portion of them in Active Directory<\/p>\n<p>computer Accounts<\/p>\n<p>The whole syntax is the same you will find in Windows Help, so it doesn\u2019t make sense for me to me to copy the syntax in this blog.<\/p>\n<p>Daily taks in workstations:<\/p>\n<p>a) Create a workstation account:<\/p>\n<p>dsadd computer &#8220;computername&#8221; -desc &#8220;description&#8221;<\/p>\n<p>Real case:<br \/>\ndsadd computer &#8220;CN=computer2,OU=TORONTO,DC=mohan,DC=com&#8221;<br \/>\n-desc &#8220;MktPC&#8221; -loc &#8220;5th Floor\u201d<br \/>\nb) Reset a computer account(reset workstation account):<\/p>\n<p>If the workstations loses the trust to the domain, reset the account, you\u2019ll see an entry in event viewer so you can proceed with this task surely.<\/p>\n<p>dsmod computer &#8220;computername&#8221; -reset<\/p>\n<p>Real case:<\/p>\n<p>dsmod computer &#8220;CN=computer2,OU=TORONTO,DC=mohan,DC=com&#8221; \u2013reset<\/p>\n<p>c) You can also test the workstation security channel to the domain controller with this syntax too:<\/p>\n<p>nltest.exe \/server:PcMarketing \/sc_query:mohan.com<\/p>\n<p>You will have a similar output like this, if the channel is ok:<\/p>\n<p>Flags: 30 HAS_IP HAS_TIMESERV<br \/>\nTrusted DC Name \\\\DomainController02.mohan.com<br \/>\nTrusted DC Connection Status Status = 0 0x0 NERR_Success<br \/>\nThe command completed successfully<\/p>\n<p>d) Move a workstation account:<\/p>\n<p>dsmove &#8221; computername &#8221; -newparent &#8220;NewParentDN&#8221;<\/p>\n<p>Real case:<\/p>\n<p>dsmove &#8220;CN=PCTEST, OU=LOSTPCs,DC=mohan,DC=com&#8221; -newparent &#8220;OU=SALES,OU=MKT,OU=BOSTON,DC=mohan,DC=com&#8221;<\/p>\n<p>e) Let\u2019s clean the Active Directory from inactive workstations:<\/p>\n<p>If you use:<\/p>\n<p>Dsquery computer \u2013inactive 180<\/p>\n<p>It will only run in Windows 2003 domain functional level and localizes inactive PCs in the last 180 days.<\/p>\n<p>If you use:<\/p>\n<p>Dsquery computer \u2013stalepwd 180<\/p>\n<p>You will have a listing of suspect workstations that did not renew their passwords in the last 180 days against the domain controller. It\u2019s true, it can find some PCs that because of an operating system error, did not renew their passwords, but in most cases these are really few. Once you have have the script, you can delete or disable these workstation accounts.<\/p>\n<p>If you want to list AND move rogue workstations, run this query:<\/p>\n<p>for \/F %a in (&#8216;dsquery computer -stalepwd 60&#8217;) do @dsmove %a -newparent OU=PCs,OU=Disabled,DC=mohan,DC=com<\/p>\n<p>these query puts these accounts in the OU \u201cDisabled\u201d, next you can modify the script to disable or delete these accounts.<br \/>\nf) Identify PCs in the \u201ccomputers\u201d container:<\/p>\n<p>Sometimes you check that some PCs have GPO conflicts or problems to download the GPO, it happens oft when they are for the first time added to the domain and not moved to their containers. So, identify and move them !!<\/p>\n<p>dsquery computer cn=computers,DC=mohan,DC=com&gt;c:\\PCsOUcomputers.txt<\/p>\n<p>the query puts the result to a txt file, so you can later import it to an Excel.<\/p>\n<p>Tip:<br \/>\nYou want to see who is logged on that PCs, so download the tool pslogged from: www.sysinternals.com,<br \/>\nCopy it in your system32 path and execute psloggedon \\\\PCName then run:<\/p>\n<p>dsquery user -samid username | dsget user -fn -ln -display -office \u2013desc<\/p>\n<p>you identify so the user, location and other useful information to move that PC to the respective OU.<\/p>\n<p>Note: Don\u00b4t forget that for most scripts deployed to the domain and PCs, you should have the necessary admin rights.<\/p>\n<p>g) Get a listing on the fly from the workstations in the domain:<\/p>\n<p>dsquery computer \u2013limit 600<\/p>\n<p>or the import to version:<\/p>\n<p>dsquery computer \u2013limit 600&gt;c:\\domainPCs.txt<\/p>\n<p>Note: Limit 600 refers to the quantity of workstations in the domain.<\/p>\n<p>User Accounts<\/p>\n<p>&nbsp;<\/p>\n<p>Daily \u201cUser Tasks\u201d:<\/p>\n<p>a) Adding users as a batch creation:<\/p>\n<p>for \/L %d in (1,1,50) do dsadd user cn=user%d,ou=OUTEST,dc=mohan,dc=com -pwd 12345678910 -office &#8220;BOSTON&#8221; -title &#8220;Operator&#8221; -dept Ingen -mustchpwd yes -canchpwd yes -disabled yes<\/p>\n<p>you get 50 dummy users to work in mohan environments or modify them to production users.<\/p>\n<p>The individual creation is simpler, here you get the syntax plus a login script option:<\/p>\n<p>dsadd user cn=dummyuser,ou=OUTEST,dc=mohan,dc=com -display DUMMY -pwd mypassword -office &#8220;BOSTON&#8221; -title &#8220;Operator&#8221; -dept Ingen -loscr scriptlogin.vbs -mustchpwd yes -canchpwd yes -disabled yes<br \/>\nb) User queries in the Active Directory_<\/p>\n<p>dsquery user and dsget user are veru useful together:<\/p>\n<p>Check the SAM account name, irst and last name:<\/p>\n<p>dsquery user | dsget user \u2013samid \u2013fn \u2013ln<\/p>\n<p>The same query in a specific OU:<\/p>\n<p>dsquery user &#8220;OU=Users,OU=Consulting,OU=BOSTON,OU=USA,DC=mohan,DC=com&#8221; | dsget user -display \u2013samid<\/p>\n<p>Move a user from one OU to another:<\/p>\n<p>dsquery user -name &#8220;USER1&#8221; | dsmove \u2013newparent &#8220;OU=BOSTON,DC=mohan,DC=com&#8221;<\/p>\n<p>Check which user accounts expire soon:<\/p>\n<p>dsquery user OU=BOSTON,DC=mohan,DC=com | dsget user -samid -fn -ln -acctexpires<\/p>\n<p>with this you work in a proactive environment and don\u00b4t bother to receive calls over the weekend.<\/p>\n<p>With this you get inactive users or suspected from inactivity(output to txt).<\/p>\n<p>dsquery user -stalepwd 90 \u2013limit 1000&gt;c:\\users.txt<\/p>\n<p>Note: 1000 is the object quantity and you can import the txt to Excel for better manipulation.<\/p>\n<p>Find the group membership of a user:<\/p>\n<p>dsquery user -samid John | dsget user -memberof \u2013expand<\/p>\n<p>or with a better output, in a double piping:<\/p>\n<p>dsquery user -samid John | dsget user -memberof -expand | dsget group -samid<\/p>\n<p>Reset the user password:<\/p>\n<p>dsquery user -samid Cocoliso | dsmod user -pwd nuevopassword<\/p>\n<p>Check which users don\u00b4t have a login script assigned:<\/p>\n<p>dsquery * domainroot -filter &#8220;(&amp;(objectCategory=Person)(objectClass=User)(!scriptPath=*))&#8221; -limit 0 -attr sAMAccountName sn givenName pwdLast Set distinguishedName<\/p>\n<p>Check which user names begin with z:<\/p>\n<p>dsquery user -name z*<\/p>\n<p>GROUPS<\/p>\n<p>For the next scripts, please refer to the Microsoft Help if you have doubts in terms of groups in Active Directory:<br \/>\nLet\u2019s practice some more and see more examples:<\/p>\n<p>a) Creating groups:<\/p>\n<p>Creating a security group with domain local scope:<\/p>\n<p>dsadd group &#8220;cn=DL_ING, ou=ULM, dc=mohan, dc=com&#8221; -secgrp yes -scope L<\/p>\n<p>Creating a security group with universal scope:<\/p>\n<p>dsadd group &#8220;CN=INGES,OU=Caracas,DC=mohan,DC=com&#8221; -samid &#8220;ING&#8221; -secgrp no -scope u<\/p>\n<p>b) Group membership<\/p>\n<p>Check which users belong to the Consulting Group:<\/p>\n<p>dsquery group -name Consulting | dsget group \u2013members<br \/>\nCheck which groups begin with g_, which scope they have and if they are security groups:<\/p>\n<p>dsquery group -name g_* | dsget group -dn -scope \u2013secgrp<\/p>\n<p>Or check the membership of a group itself:<\/p>\n<p>dsquery group -name G_Internet | dsget group -memberof<br \/>\nc) Changing Group membership<\/p>\n<p>Change the group membership from the domain users group to a specific group, G_DomainUsers:<\/p>\n<p>dsquery user -name * | dsmod group &#8220;CN=G_DomainUsers,CN=Users,DC=seattle,DC=cpandl,DC=com&#8221; &#8211; chmbr<\/p>\n<p>d) Move the members of a group to another group:<\/p>\n<p>dsget group &#8220;CN=GG_SALES,OU=OFC,DC=mohan,DC=com&#8221; -members | dsmod group &#8220;CN=G_INGES,OU=La Habana,DC=mohan,DC=com&#8221; -addmbr<\/p>\n<p>e) Mantaining Groups:<\/p>\n<p>Check the groups withouth members:<\/p>\n<p>dsquery * -filter &#8220;&amp;(objectCategory=group)(!member=*)&#8221; -limit 0 -attr whenCreated whenChanged groupType sAMAccountName distinguishedName memberOf<br \/>\nCheck which users don\u00b4t belong to any group:<\/p>\n<p>dsquery * domainroot -filter &#8220;(&amp;(objectcategory=person)(Objectclass=user)(!memberof=*))&#8221;<br \/>\nSERVERS<\/p>\n<p>Dsquery server<\/p>\n<p>To find all domain controllers in the domain mohan.com that are global catalog servers:<br \/>\ndsquery server \u2013domain mohan.com -isgc<\/p>\n<p>Finds all DCs and display their relative distinguished names, type:<\/p>\n<p>dsquery server -o rdn -forest<\/p>\n<p>Finds all DCs in the site BOLIVIA and display their relative distinguished names, type:<\/p>\n<p>dsquery server -o rdn -site BOLIVIA<\/p>\n<p>Finds the DC in the forest that holds the schema operations master role:<\/p>\n<p>dsquery server \u2013forest \u2013hasfsmo schema<\/p>\n<p>Finds all DCS for mohan.com and display their DNS host name and site name<\/p>\n<p>dsquery server -domain mohan.com | dsget server -dnsname \u2013site<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Reset Password and Force Change at Logon for an Entire OU: dsquery user &#8220;OU=Singapore,OU=Staff,DC=rmohan,DC=com&#8221; | dsmod user -pwd Password1 -mustchpwd yes<\/p>\n<p>Change &#8220;company&#8221; AD attribute for all Users in an Entire OU: dsquery user &#8220;OU=Singapore,OU=Staff,DC=rmohan,DC=com&#8221; | dsmod user -company &#8220;rmohan&#8221;<\/p>\n<p>Return the DN of all users in an OU: dsquery user &#8220;OU=Singapore,OU=Staff,DC=rmohan,DC=com&#8221;<\/p>\n<p>&#8220;CN=User1,OU=Singapore,OU=Staff,DC=rmohan,DC=com&#8221; &#8220;CN=User2,OU=Singapore,OU=Staff,DC=rmohan,DC=com&#8221; &#8220;CN=User3,OU=Singapore,OU=Staff,DC=rmohan,DC=com&#8221;<\/p>\n<p> [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[48],"tags":[],"_links":{"self":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts\/2848"}],"collection":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2848"}],"version-history":[{"count":3,"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts\/2848\/revisions"}],"predecessor-version":[{"id":2851,"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts\/2848\/revisions\/2851"}],"wp:attachment":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2848"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2848"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2848"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}