type=page
status=published
title=uninstall-node-dcom
next=uninstall-node-ssh.html
prev=uninstall-node.html
~~~~~~

uninstall-node-dcom
===================

[[uninstall-node-dcom-1]][[GSRFM775]][[uninstall-node-dcom]]

uninstall-node-dcom
-------------------

Uninstalls \{product---name} software from specified DCOM-enabled hosts

[[sthref2215]]

=== Synopsis

[source]
----
asadmin [asadmin-options] uninstall-node-dcom [--help]
[--installdir as-install-parent]
[--windowsuser windows-user] [--windowsdomain windows-domain]
[--force={false|true}]
host-list
----

[[sthref2216]]

=== Description

The `uninstall-node-dcom` subcommand uninstalls \{product---name}
software from the hosts that are specified as the operand of the
subcommand. This subcommand requires the Distributed Component Object
Model (DCOM) remote protocol to be configured on the host where the
subcommand is run and on each host where the \{product---name} software
is being uninstalled.

[NOTE]
====
To uninstall \{product---name} software on hosts that use secure shell
(SSH), use the
link:uninstall-node-ssh.html#uninstall-node-ssh-1[`uninstall-node-ssh`(1)]
subcommand.
====

By default, if any node except the predefined node ``localhost-``domain
resides on any host from which \{product---name} software is being
uninstalled, the subcommand fails. To uninstall the \{product---name}
software from a host on which user-defined nodes reside, set the
`--force` option to `true`. If the `--force` option is `true`, the
subcommand removes the entire content of the parent of the base
installation directory.

If a file under the parent of the base installation directory is open,
the subcommand fails.

If multiple hosts are specified, the configuration of the following
items must be the same on all hosts:

* Parent of the base installation directory for the \{product---name} software
* Windows user
* Windows domain

The subcommand does not modify the configuration of the domain
administration server (DAS).

This subcommand is supported in local mode only.

[[sthref2217]]

=== Options

asadmin-options::
  Options for the `asadmin` utility. For information about these
  options, see the link:asadmin.html#asadmin-1m[`asadmin`(1M)] help page.
`--help`::
`-?`::
  Displays the help text for the subcommand.
`--installdir`::
  The absolute path to the parent of the base installation directory
  where the \{product---name} software is installed on each host, for
  example, `C:\glassfish3`. +
  The user that is running this subcommand must have write access to the
  specified directory. Otherwise, an error occurs. +
  The specified directory must contain the installation of the
  \{product---name} software on the host. Otherwise, an error occurs. +
  The default is the parent of the base installation directory of the
  \{product---name} software on the host where this subcommand is run.
`--windowsuser`::
`-w`::
  The user on this node's host that is to run the process for connecting
  to the host through DCOM. The default is the user that is running the
  DAS process.
`--windowsdomain`::
`-d`::
  The name of the Windows domain that contains the user that the
  `--windowsuser` option specifies. The default is the name of the host
  on which the subcommand is run.
`--force`::
  Specifies whether the subcommand uninstalls the \{product---name}
  software from a host even if a user-defined node resides on the host.
  Possible values are as follows:

  `false`;;
    If a user-defined node resides on a host, the software is not
    uninstalled and the subcommand fails (default). +
    If the `--force` option is `false`, the subcommand removes only the
    \{product---name} software files. Other content if the parent of the
    base installation directory, such as configuration files, are not removed.
  `true`;;
    The subcommand uninstalls the \{product---name} software from the
    host even if a user-defined node resides on the host.

+
If the `--force` option is `true`, the subcommand removes the entire
    content of the parent of the base installation directory.

[[sthref2218]]

=== Operands

host-list::
  A space-separated list of the names of the hosts from which the
  \{product---name} software is to be uninstalled.

[[sthref2219]]

=== Examples

[[GSRFM776]][[sthref2220]]

==== Example 1   Uninstalling \{product---name} Software From the Default Location

This example uninstalls \{product---name} software on the hosts
`wpmdl1.example.com` and `wpmdl2.example.com` from the default location.

[source]
----
asadmin> uninstall-node-dcom wpmdl1 wpmdl2
Command uninstall-node-dcom executed successfully.
----

[[GSRFM777]][[sthref2221]]

==== Example 2   Forcibly Uninstalling \{product---name} Software

This example uninstalls \{product---name} software on the host
`xkyd.example.com`.

The software is uninstalled even if a user-defined node resides on the
host. The entire content of the `C:\glassfish3` directory is removed.

[source]
----
asadmin> uninstall-node-dcom --force --installdir C:\glassfish3 xkyd.example.com
Command uninstall-node-dcom executed successfully.
----

[[sthref2222]]

=== Exit Status

0::
  command executed successfully
1::
  error in executing the command

[[sthref2223]]

=== See Also

link:asadmin.html#asadmin-1m[`asadmin`(1M)]

link:install-node-dcom.html#install-node-dcom-1[`install-node-dcom`(1)],
link:uninstall-node-ssh.html#uninstall-node-ssh-1[`uninstall-node-ssh`(1)]


