type=page
status=published
title=asadmin
next=capture-schema.html
prev=appclient.html
~~~~~~
asadmin
=======

The script content on this page is for navigation purposes only and does
not alter the content in any way.

[[asadmin-1m]][[GSRFM00263]][[asadmin]]

asadmin
-------

utility for performing administrative tasks for Oracle \{product---name}

[[sthref2364]]

Synopsis

[source,oac_no_warn]
----
asadmin [--host host] 
[--port port] 
[--user admin-user] 
[--passwordfile filename] 
[--terse={true|false}] 
[--secure={false|true}] 
[--echo={true|false}] 
[--interactive={true|false}] 
[--detach={true|false}]
[--help] 
[subcommand [options] [operands]]
----

[[sthref2365]]

Description

Use the `asadmin` utility to perform administrative tasks for Oracle
GlassFish Server. You can use this utility instead of the Administration
Console interface.

Subcommands of the asadmin Utility

The subcommand identifies the operation or task that you are performing.
Subcommands are case-sensitive. Each subcommand is either a local
subcommand or a remote subcommand.

* A local subcommand can be run without a running domain administration
server (DAS). However, to run the subcommand and have access to the
installation directory and the domain directory, the user must be logged
in to the machine that hosts the domain.
* A remote subcommand is always run by connecting to a DAS and running
the subcommand there. A running DAS is required.

asadmin Utility Options and Subcommand Options

Options control the behavior of the `asadmin` utility and its
subcommands. Options are also case-sensitive.

The `asadmin` utility has the following types of options:

* `asadmin` utility options. These options control the behavior of the
`asadmin` utility, not the subcommand. The `asadmin` utility options may
precede or follow the subcommand, but `asadmin` utility options after
the subcommand are deprecated. All `asadmin` utility options must either
precede or follow the subcommand. If `asadmin` utility options are
specified both before and after the subcommand, an error occurs. For a
description of the `asadmin` utility options, see the "Options" section
of this help information.
* Subcommand options. These options control the behavior of the
subcommand, not the `asadmin` utility. Subcommand options must follow
the subcommand. For a description of a subcommand's options, see the
help information for the subcommand.

A subcommand option may have the same name as an `asadmin` utility
option, but the effects of the two options are different.

The `asadmin` utility options and some subcommand options have a long
form and a short form.

* The long form of an option has two dashes (`--`) followed by an option
word.
* The short form of an option has a single dash (`-`) followed by a
single character.

For example, the long form and the short form of the option for
specifying terse output are as follows:

* Long form: `--terse`
* Short form: `-t`

Most options require argument values, except Boolean options, which
toggle to enable or disable a feature.

Operands of asadmin Subcommands

Operands specify the items on which the subcommand is to act. Operands
must follow the argument values of subcommand options, and are set off
by a space, a tab, or double dashes (`--`). The `asadmin` utility treats
anything that follows the subcommand options and their values as an
operand.

Escape Characters in Options for the asadmin Utility

Escape characters are required in options of the `asadmin` utility for
the following types of characters:

* Meta characters in the UNIX operating system. These characters have
special meaning in a shell. Meta characters in the UNIX operating system
include: `\/,.!$%^&*|{}[]"'\`~;`. +
To disable these characters, use the backslash (`\`) escape character or
enclose the entire command-line argument in single quote (`'`)
characters. +
The following examples illustrate the effect of escape characters on the
`*` character. In these examples, the current working directory is the
domains directory.

** The following command, without the escape character, echoes all files
in the current directory: +
[source,oac_no_warn]
----
prompt% echo *
domain1 domain2
----

** The following command, in which the backslash (`\`) escape character
precedes the `*` character, echoes the `*` character: +
[source,oac_no_warn]
----
prompt% echo \*
*
----

** The following command, in which the `*` character is enclosed in
single quote (`'`) characters, echoes the `*` character: +
[source,oac_no_warn]
----
prompt% echo '*'
*
----
The escape character is also a special character in the UNIX operating
system and in the Java language. Therefore, in the UNIX operating system
and in multimode, you must apply an additional escape character to every
escape character in the command line. This requirement does not apply to
the Windows operating system. +
For example, the backslash (`\`) UNIX operating system meta character in
the option argument `Test\Escape\Character` is specified on UNIX and
Windows systems as follows:

** On UNIX systems, each backslash must be escaped with a second
backslash: +
[source,oac_no_warn]
----
Test\\Escape\\Character
----

** On Windows systems, no escape character is required: +
[source,oac_no_warn]
----
Test\Escape\Character
----
::

[NOTE]
=======================================================================

In contexts where meta characters in the UNIX operating system are
unambiguous, these characters do not require escape characters. For
example, in the link:set.html#set-1[`set`(1)] subcommand, the value that
is to be set is specified as name`=`value. Because name can never
include an equals sign, no escape character is required to disable the
equals sign. Therefore, everything after the equals sign is an
uninterpreted string that the `set` subcommand uses unchanged.

=======================================================================

* Spaces. The space is the separator in the command-line interface. To
distinguish a space in a command-line argument from the separator in the
command-line interface, the space must be escaped as follows:

** For the UNIX operating system in single mode and multimode, and for
all operating systems in multimode, use the backslash (`\`) escape
character or enclose the entire command-line argument in single quote
(`'`) characters or double quote (") characters.

** For the Windows operating system in single mode, enclose the entire
command-line argument in double quote (") characters.
* Option delimiters. The `asadmin` utility uses the colon character
(`:`) as a delimiter for some options. The backslash (`\`) escape
character is required if the colon is part of any of the following
items:

** A property

** An option of the Virtual Machine for the Java platform (Java Virtual
Machine or JVM machine)link:#sthref2366[^Foot 1 ^] +
For example, the operand of the subcommand
link:create-jvm-options.html#create-jvm-options-1[`create-jvm-options`(1)]
specifies JVM machine options in the following format: +
[source,oac_no_warn]
----
(jvm-option-name[=jvm-option-value])
[:jvm-option-name[=jvm-option-value]]*
----
Multiple JVM machine options in the operand of the `create-jvm-options`
subcommand are separated by the colon (`:`) delimiter. If
jvm-option-name or jvm-option-value contains a colon, the backslash
(`\`) escape character is required before the colon. +
The backslash (`\`) escape character is also required before a single
quote (`'`) character or a double quote (") character in an option that
uses the colon as a delimiter. +
When used without single quote (') characters, the escape character
disables the option delimiter in the command-line interface. +
For the UNIX operating system in single mode and multimode, and for all
operating systems in multimode, the colon character and the backslash
character in an option that uses the colon as a delimiter must be
specified as follows:

** To pass a literal backslash to a subcommand, two backslashes are
required. Therefore, the colon (`:`) must be escaped by two backslashes
(`\\`).

** To prevent a subcommand from treating the backslash as a special
character, the backslash must be escaped. As a result, two literal
backslashes (`\\`) must be passed to the subcommand. To prevent the
shell from interpreting these backslashes as special characters, each
backslash must be escaped. Therefore, the backslash must be specified by
a total of four backslashes (`\\\\`). +
For the Windows operating system in single mode, a backslash (`\`) is
required to escape the colon (`:`) and the backslash (`\`) in an option
that uses the colon as a delimiter.

Instead of using the backslash (`\`) escape character, you can use the
double quote (") character or single quote (') character. The effects of
the different types of quote characters on the backslash (`\`) character
are as follows:

* Between double quote (") characters, the backslash (`\`) character is
a special character.
* Between single quote (') characters, the backslash (`\`) character is
not a special character.

Requirements for Using the --secure Option

The requirements for using the `--secure` option are as follows:

* The domain that you are administering must be configured for security.
* The `security-enabled` attribute of the `http-listener` element in the
DAS configuration must be set to `true`. +
To set this attribute, use the `set` subcommand.

Server Restart After Creation or Deletion

When you use the `asadmin` subcommands to create or delete a
configuration item, you must restart the DAS for the change to take
effect. To restart the DAS, use the
link:restart-domain.html#restart-domain-1[`restart-domain`(1)]
subcommand.

Help Information for Subcommands and the asadmin Utility

To obtain help information for an `asadmin` utility subcommand, specify
the subcommand of interest as the operand of the `help` subcommand. For
example, to obtain help information for the
link:start-domain.html#start-domain-1[`start-domain`(1)] subcommand,
type:

[source,oac_no_warn]
----
asadmin help start-domain
----

If you run the `help` subcommand without an operand, this help
information for the `asadmin` utility is displayed.

To obtain a listing of available `asadmin` subcommands, use the
link:list-commands.html#list-commands-1[`list-commands`(1)] subcommand.

[[sthref2367]]

Options

`--host`::
`-H`::
  The machine name where the DAS is running. The default value is
  `localhost`.
`--port`::
`-p`::
  The HTTP port or HTTPS port for administration. This port is the port
  in the URL that you specify in your web browser to manage the domain.
  For example, in the URL `http://localhost:4949`, the port is 4949. +
  The default port number for administration is 4848.
`--user`::
`-u`::
  The user name of the authorized administrative user of the DAS. +
  If you have authenticated to a domain by using the `asadmin login`
  command, you need not specify the `--user` option for subsequent
  operations on the domain.
`--passwordfile`::
`-W`::
  Specifies the name, including the full path, of a file that contains
  password entries in a specific format. +
  Note that any password file created to pass as an argument by using
  the `--passwordfile` option should be protected with file system
  permissions. Additionally, any password file being used for a
  transient purpose, such as setting up SSH among nodes, should be
  deleted after it has served its purpose. +
  The entry for a password must have the `AS_ADMIN_` prefix followed by
  the password name in uppercase letters, an equals sign, and the
  password. +
  The entries in the file that are read by the `asadmin` utility are as
  follows: +
  * `AS_ADMIN_PASSWORD=`administration-password
  * `AS_ADMIN_MASTERPASSWORD=`master-password +
  The entries in this file that are read by subcommands are as follows: +
  * `AS_ADMIN_NEWPASSWORD=`new-administration-password (read by the
  link:start-domain.html#start-domain-1[`start-domain`(1)] subcommand)
  * `AS_ADMIN_USERPASSWORD=`user-password (read by the
  link:create-file-user.html#create-file-user-1[`create-file-user`(1)]
  subcommand)
  * `AS_ADMIN_ALIASPASSWORD=`alias-password (read by the
  link:create-password-alias.html#create-password-alias-1[`create-password-alias`(1)]
  subcommand)
  * `AS_ADMIN_MAPPEDPASSWORD=`mapped-password (read by the
  link:create-connector-security-map.html#create-connector-security-map-1[`create-connector-security-map`(1)]
  subcommand)
  * `AS_ADMIN_WINDOWSPASSWORD=`windows-password (read by the
  link:create-node-dcom.html#create-node-dcom-1[`create-node-dcom`(1)],
  link:install-node-dcom.html#install-node-dcom-1[`install-node-dcom`(1)],
  and link:update-node-ssh.html#update-node-dcom-1[`update-node-dcom`(1)]
  subcommands)
  * `AS_ADMIN_SSHPASSWORD=`sshd-password (read by the
  link:create-node-ssh.html#create-node-ssh-1[`create-node-ssh`(1)],
  link:install-node.html#install-node-1[`install-node`(1)],
  link:install-node-ssh.html#install-node-ssh-1[`install-node-ssh`(1)],
  and
  link:update-node-ssh001.html#update-node-ssh-1[`update-node-ssh`(1)]
  subcommands)
  * `AS_ADMIN_SSHKEYPASSPHRASE=`sshd-passphrase (read by the
  link:create-node-ssh.html#create-node-ssh-1[`create-node-ssh`(1)],
  link:install-node.html#install-node-1[`install-node`(1)],
  link:install-node-ssh.html#install-node-ssh-1[`install-node-ssh`(1)],
  and
  link:update-node-ssh001.html#update-node-ssh-1[`update-node-ssh`(1)]
  subcommands)
  * `AS_ADMIN_JMSDBPASSWORD=` jdbc-user-password (read by the
  link:configure-jms-cluster.html#configure-jms-cluster-1[`configure-jms-cluster`(1)]
  subcommand) +
  These password entries are stored in clear text in the password file.
  To provide additional security, the `create-password-alias` subcommand
  can be used to create aliases for passwords that are used by remote
  subcommands. The password for which the alias is created is stored in
  an encrypted form. If an alias exists for a password, the alias is
  specified in the entry for the password as follows: +
[source,oac_no_warn]
----
AS_ADMIN_password-name=${ALIAS=password-alias-name} 
----
::
  For example: +
[source,oac_no_warn]
----
AS_ADMIN_SSHPASSWORD=${ALIAS=ssh-password-alias}
AS_ADMIN_SSHKEYPASSPHRASE=${ALIAS=ssh-key-passphrase-alias}
----
::
  In domains that do not allow unauthenticated login, all remote
  subcommands must specify the administration password to authenticate
  to the DAS. The password can be specified by one of the following
  means: +
  * Through the `--passwordfile` option
  * Through the link:login.html#login-1[`login`(1)] subcommand
  * Interactively at the command prompt +
  The `login` subcommand can be used to specify only the administration
  password. For other passwords that remote subcommands require, use the
  `--passwordfile` option or specify them at the command prompt. +
  After authenticating to a domain by using the `asadmin login` command,
  you need not specify the administration password through the
  `--passwordfile` option for subsequent operations on the domain.
  However, only the `AS_ADMIN_PASSWORD` option is not required. You
  still must provide the other passwords, for example,
  `AS_ADMIN_USERPASSWORD`, when required by individual subcommands, such
  as
  link:update-file-user.html#update-file-user-1[`update-file-user`(1)]. +
  For security reasons, a password that is specified as an environment
  variable is not read by the `asadmin` utility. +
  The master password is not propagated on the command line or an
  environment variable, but can be specified in the file that the
  `--passwordfile` option specifies. +
  The default value for `AS_ADMIN_MASTERPASSWORD` is `changeit`.
`--terse`::
`-t`::
  If true, output data is very concise and in a format that is optimized
  for use in scripts instead of for reading by humans. Typically,
  descriptive text and detailed status messages are also omitted from
  the output data. Default is false.
`--secure`::
`-s`::
  If set to true, uses SSL/TLS to communicate with the DAS. +
  The default is false.
`--echo`::
`-e`::
  If set to true, the command-line statement is echoed on the standard
  output. Default is false.
`--interactive`::
`-I`::
  If set to true, only the required options are prompted. +
  The default depends on how the `asadmin` utility is run: +
  * If the `asadmin` utility is run from a console window, the default
  is `true`.
  * If the `asadmin` utility is run without a console window, for
  example, from within a script, the default is `false`.
`--detach`::
  If set to `true`, the specified `asadmin` subcommand is detached and
  executed in the background in detach mode. The default value is
  `false`. +
  The `--detach` option is useful for long-running subcommands and
  enables you to execute several independent subcommands from one
  console or script. +
  The `--detach` option is specified before the subcommand. For example,
  in single mode, `asadmin --detach` subcommand. +
  Job IDs are assigned to subcommands that are started using
  `asadmin --detach`. You can use the
  link:list-jobs.html#list-jobs-1[`list-jobs`(1)] subcommand to view the
  jobs and their job IDs, the link:attach.html#attach-1[`attach`(1)]
  subcommand to reattach to the job and view its status and output, and
  the
  link:configure-managed-jobs.html#configure-managed-jobs-1[`configure-managed-jobs`(1)]
  subcommand to configure how long information about the jobs is kept.
`--help`::
`-?`::
  Displays the help text for the `asadmin` utility.

[[sthref2368]]

Examples

[[GSRFM805]][[sthref2369]]

Example 1   Running an `asadmin` Utility Subcommand in Single Mode

This example runs the
link:list-applications.html#list-applications-1[`list-applications`(1)]
subcommand in single mode. In this example, the default values for all
options are used.

The example shows that the application `hello` is deployed on the local
host.

[source,oac_no_warn]
----
asadmin list-applications
hello <web>

Command list-applications executed successfully.
----

[[GSRFM806]][[sthref2370]]

Example 2   Specifying an `asadmin` Utility Option With a Subcommand

This example specifies the `--host` `asadmin` utility option with the
`list-applications` subcommand in single mode. In this example, the DAS
is running on the host `srvr1.example.com`.

The example shows that the applications `basic-ezcomp`, `scrumtoys`,
`ejb31-war`, and `automatic-timer-ejb` are deployed on the host
`srvr1.example.com`.

[source,oac_no_warn]
----
asadmin --host srvr1.example.com list-applications
basic-ezcomp <web>
scrumtoys <web>
ejb31-war <ejb, web>
automatic-timer-ejb <ejb>

Command list-applications executed successfully.
----

[[GSRFM807]][[sthref2371]]

Example 3   Specifying an `asadmin` Utility Option and a Subcommand
Option

This example specifies the `--host` `asadmin` utility option and the
`--type` subcommand option with the `list-applications` subcommand in
single mode. In this example, the DAS is running on the host
`srvr1.example.com` and applications of type `web` are to be listed.

[source,oac_no_warn]
----
asadmin --host srvr1.example.com list-applications --type web
basic-ezcomp <web>
scrumtoys <web>
ejb31-war <ejb, web>

Command list-applications executed successfully.
----

[[GSRFM808]][[sthref2372]]

Example 4   Escaping a Command-Line Argument With Single Quote
Characters

The commands in this example specify the backslash (`\`) UNIX operating
system meta character and the colon (:) option delimiter in the property
value `c:\extras\pmdapp`.

For the UNIX operating system in single mode and multimode, and for all
operating systems in multimode, the backslash (`\`) is required to
escape the backslash (`\`) meta character and the colon (:) option
delimiter:

[source,oac_no_warn]
----
asadmin deploy --property extras.home='c\:\\extras\\pmdapp' pmdapp.war
Application deployed with name pmdapp.
Command deploy executed successfully
----

For the Windows operating system in single mode, the single quote (`'`)
characters eliminate the need for other escape characters:

[source,oac_no_warn]
----
asadmin deploy --property extras.home='c:\extras\pmdapp' pmdapp.war
Application deployed with name pmdapp.
Command deploy executed successfully
----

[[GSRFM809]][[sthref2373]]

Example 5   Specifying a UNIX Operating System Meta Character in an
Option

The commands in this example specify the backslash (`\`) UNIX operating
system meta character in the option argument `Test\Escape\Character`.

For the UNIX operating system in single mode and multimode, and for all
operating systems in multimode, the backslash (`\`) is required to
escape the backslash (`\`) meta character:

[source,oac_no_warn]
----
asadmin --user admin --passwordfile gfpass create-jdbc-connection-pool 
--datasourceclassname sampleClassName 
--description Test\\Escape\\Character 
sampleJDBCConnectionPool
----

For the Windows operating system in single mode, no escape character is
required:

[source,oac_no_warn]
----
asadmin --user admin --passwordfile gfpass create-jdbc-connection-pool 
--datasourceclassname sampleClassName 
--description Test\Escape\Character 
sampleJDBCConnectionPool
----

[[GSRFM835]][[sthref2374]]

Example 6   Specifying a Command-Line Argument That Contains a Space

The commands in this example specify spaces in the operand
`C:\Documents and Settings\gfuser\apps\hello.war`.

For all operating systems in single mode or multimode, the entire
operand can be enclosed in double quote (`"`) characters:

[source,oac_no_warn]
----
asadmin deploy "C:\Documents and Settings\gfuser\apps\hello.war"
Application deployed with name hello.
Command deploy executed successfully.
----

For the UNIX operating system in single mode and multimode, and for all
operating systems in multimode, the entire command-line argument can be
enclosed in single quote (`'`) characters:

[source,oac_no_warn]
----
asadmin> deploy 'C:\Documents and Settings\gfuser\apps\hello.war'
Application deployed with name hello.
Command deploy executed successfully.
----

Alternatively, for the UNIX operating system in single mode and
multimode, and for all operating systems in multimode, the backslash
(`\`) escape character can be used before each space in the operand. In
this situation, the backslash (`\`) escape character is required before
each backslash in the operand:

[source,oac_no_warn]
----
asadmin> deploy C:\\Documents\ and\ Settings\\gfuser\\apps\\hello.war
Application deployed with name hello.
Command deploy executed successfully.
----

[[GSRFM810]][[sthref2375]]

Example 7   Specifying a Meta Character and an Option Delimiter
Character in a Property

The commands in this example specify the backslash (`\`) UNIX operating
system meta character and the colon (:) option delimiter character in
the `--property` option of the
link:create-jdbc-connection-pool.html#create-jdbc-connection-pool-1[`create-jdbc-connection-pool`(1)]
subcommand.

The name and value pairs for the `--property` option are as follows:

[source,oac_no_warn]
----
user=dbuser
passwordfile=dbpasswordfile
DatabaseName=jdbc:derby
server=http://localhost:9092
----

For the UNIX operating system in single mode and multimode, and for all
operating systems in multimode, a backslash (`\`) is required to escape
the colon (`:`) and the backslash (`\`):

[source,oac_no_warn]
----
asadmin --user admin --passwordfile gfpass create-jdbc-connection-pool 
--datasourceclassname com.derby.jdbc.jdbcDataSource
--property user=dbuser:passwordfile=dbpasswordfile:
DatabaseName=jdbc\\:derby:server=http\\://localhost\\:9092 javadb-pool
----

Alternatively, the entire argument to the `--property` option can be
enclosed in single quote (') characters:

[source,oac_no_warn]
----
asadmin --user admin --passwordfile gfpass create-jdbc-connection-pool 
--datasourceclassname com.derby.jdbc.jdbcDataSource
--property 'user=dbuser:passwordfile=dbpasswordfile:
DatabaseName="jdbc:derby":server="http://localhost:9092"' javadb-pool
----

For the Windows operating system in single mode, a backslash (`\`) is
required to escape only the colon (`:`), but not the backslash (`\`):

[source,oac_no_warn]
----
asadmin --user admin --passwordfile gfpass create-jdbc-connection-pool
--datasourceclassname com.derby.jdbc.jdbcDataSource
--property user-dbuser:passwordfile-dbpasswordfile:
DatabaseName=jdbc\:derby:server=http\://localhost\:9092 javadb-pool
----

For all operating systems, the need to escape the colon (`:`) in a value
can be avoided by enclosing the value in double quote characters or
single quote characters:

[source,oac_no_warn]
----
asadmin --user admin --passwordfile gfpass create-jdbc-connection-pool
--datasourceclassname com.derby.jdbc.jdbcDataSource
--property user=dbuser:passwordfile=dbpasswordfile:
DatabaseName=\"jdbc:derby\":server=\"http://localhost:9092\" javadb-pool
----

[[GSRFM811]][[sthref2376]]

Example 8   Specifying an Option Delimiter and an Escape Character in a
JVM Machine Option

The commands in this example specify the following characters in the
`-Dlocation=c:\sun\appserver` JVM machine option:

* The colon (`:`) option delimiter
* The backslash (`\`) escape character

For the UNIX operating system in single mode and multimode, and for all
operating systems in multimode, these characters must be specified as
follows:

* To pass a literal backslash to a subcommand, two backslashes are
required. Therefore, the colon (`:`) must be escaped by two backslashes
(`\\`).
* To prevent the subcommand from treating the backslash as a special
character, the backslash must be escaped. As a result, two literal
backslashes (`\\`) must be passed to the subcommand. To prevent the
shell from interpreting these backslashes as special characters, each
backslash must be escaped. Therefore, the backslash must be specified by
a total of four backslashes (`\\\\`).

The resulting command is as follows:

[source,oac_no_warn]
----
asadmin create-jvm-options --target test-server 
-e -Dlocation=c\\:\\\\sun\\\\appserver
----

For the Windows operating system in single mode, a backslash (`\`) is
required to escape the colon (`:`) and the backslash (`\`):

[source,oac_no_warn]
----
asadmin create-jvm-options --target test-server 
-e -Dlocation=c\:\\sun\\appserver
----

[[GSRFM812]][[sthref2377]]

Example 9   Specifying an Option That Contains an Escape Character

The commands in this example specify the backslash (`\`) character and
the double quote (`"`) characters in the `"Hello\App"\authentication`
option argument.

For the UNIX operating system in single mode and multimode, and for all
operating systems in multimode, a backslash (`\`) is required to escape
the double quote character (`"`) and the backslash (`\`):

[source,oac_no_warn]
----
asadmin set-web-env-entry --name="Hello User" --type=java.lang.String 
--value=techscribe --description=\"Hello\\App\"\\authentication hello
----

For the Windows operating system in single mode, a backslash (`\`) is
required to escape only the double quote (`"`), but not the backslash
(`\`):

[source,oac_no_warn]
----
asadmin set-web-env-entry --name="Hello User" --type=java.lang.String 
--value=techscribe --description=\"Hello\App\"\authentication hello
----

[[sthref2378]]

Environment Variables

Environment variables modify the default values of `asadmin` utility
options as shown in the following table.

[width="100%",cols="44%,56%",options="header",]
|==============================================
|Environment Variable |`asadmin` Utility Option
|`AS_ADMIN_TERSE` |`--terse`
|`AS_ADMIN_ECHO` |`--echo`
|`AS_ADMIN_INTERACTIVE` |`--interactive`
|`AS_ADMIN_HOST` |`--host`
|`AS_ADMIN_PORT` |`--port`
|`AS_ADMIN_SECURE` |`--secure`
|`AS_ADMIN_USER` |`--user`
|`AS_ADMIN_PASSWORDFILE` |`--passwordfile`
|`AS_ADMIN_HELP` |`--help`
|==============================================


[[sthref2379]]

Attributes

See
http://www.oracle.com/pls/topic/lookup?ctx=E18752&id=REFMAN5attributes-5[`attributes`(5)]
for descriptions of the following attributes:

[width="100%",cols="50%,50%",options="header",]
|===============================
|ATTRIBUTE TYPE |ATTRIBUTE VALUE
|Interface Stability |Unstable
|===============================


[[sthref2380]]

See Also

link:attach.html#attach-1[`attach`(1)],
link:configure-jms-cluster.html#configure-jms-cluster-1[`configure-jms-cluster`(1)],
link:configure-managed-jobs.html#configure-managed-jobs-1[`configure-managed-jobs`(1)],
link:create-connector-security-map.html#create-connector-security-map-1[`create-connector-security-map`(1)],
link:create-file-user.html#create-file-user-1[`create-file-user`(1)],
link:create-jdbc-connection-pool.html#create-jdbc-connection-pool-1[`create-jdbc-connection-pool`(1)],
link:create-jvm-options.html#create-jvm-options-1[`create-jvm-options`(1)],
link:create-node-dcom.html#create-node-dcom-1[`create-node-dcom`(1)],
link:create-node-ssh.html#create-node-ssh-1[`create-node-ssh`(1)],
link:create-password-alias.html#create-password-alias-1[`create-password-alias`(1)],
link:deploy.html#deploy-1[`deploy`(1)],
link:install-node.html#install-node-1[`install-node`(1)],
link:install-node-dcom.html#install-node-dcom-1[`install-node-dcom`(1)],
link:install-node-ssh.html#install-node-ssh-1[`install-node-ssh`(1)],
link:list-applications.html#list-applications-1[`list-applications`(1)],
link:list-commands.html#list-commands-1[`list-commands`(1)],
link:list-jobs.html#list-jobs-1[`list-jobs`(1)],
link:login.html#login-1[`login`(1)],
link:restart-domain.html#restart-domain-1[`restart-domain`(1)],
link:set.html#set-1[`set`(1)],
link:set-web-env-entry.html#set-web-env-entry-1[`set-web-env-entry`(1)],
link:start-domain.html#start-domain-1[`start-domain`(1)],
link:update-file-user.html#update-file-user-1[`update-file-user`(1)],
link:update-node-ssh.html#update-node-dcom-1[`update-node-dcom`(1)],
link:update-node-ssh001.html#update-node-ssh-1[`update-node-ssh`(1)]

http://www.oracle.com/pls/topic/lookup?ctx=E18752&id=REFMAN5attributes-5[`attributes`(5)]

'''''


Footnote Legend

Footnote 1: The terms "Java Virtual Machine" and "JVM" mean a Virtual
Machine for the Java platform. +


